1. 程式人生 > >.NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態

.NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態

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是什麽狀態