.NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態
阿新 • • 發佈:2018-10-16
ont inf src inner 新建 就是 代碼 sleep void
.NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態?答案是:WaitingForActivation
新建一個.NET Core控制臺程序,輸入如下代碼:
class Program { static void Main(string[] args) { //啟動outer task,然後在outer task裏面啟動inner task var outerTask = Task.Run(async () => { //await 之前執行Console.WriteLine("Outer task began!"); //啟動inner task var innerTask = Task.Run(() => { //inner task 的線程沈睡5秒 Thread.Sleep(5000); }); //輸出outer task即將開始await Console.WriteLine("Outer task will await!"); await innerTask;//在outerTask的線程中await innerTask的Task線程 //await 完成之後執行 Console.WriteLine("Outer task will be finished!"); }); Thread.Sleep(1000);//主線程沈睡1秒,之後outer task的線程肯定開始執行了 Console.WriteLine($"Outer task status:{outerTask.Status.ToString()}");//檢查outer task的狀態,可以看到此時狀態為WaitingForActivation Thread.Sleep(6000);//沈睡6秒,之後outer task和inner task的線程肯定結束執行了,也就是說outerTask和innerTask應該都結束了 Console.WriteLine($"Outer task status:{outerTask.Status.ToString()}");//再次檢查outer task的狀態,可以看此時狀態為RanToCompletion Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Press key contiune..."); Console.ReadKey(); } }
執行結果如下:
所以如果一個task在await另一個task,那麽其狀態就是WaitingForActivation
.NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態