c# - C# - 在非同步方法中,等待已完成的任務

112 1

當調用async方法時,得到返回的wrapper task。


public async Task ExecuteActionAsync() {


 // no await called


}


public async Task ExecuteActionAwaitAsync() {


 // await called on a completed


 await Task.CompletedTask;


}


public async Task MyMethod(){


 await ExecuteActionAsync();


 await ExecuteActionAwaitAsync();


}



时间: 原作者:

50 3

這很容易被測試:


 var t1 = ExecuteActionAsync();


 Console.WriteLine($"Returned task: {t1.IsCompleted}");


 await t1;


 Console.WriteLine($"Awaited task: {t1.IsCompleted}n");



 var t2 = MyMethod();


 Console.WriteLine($"Returned task: {t2.IsCompleted}");


 await t2;


 Console.WriteLine($"Awaited task: {t2.IsCompleted}n");



 t1 = ExecuteActionAsync();


 t2 = MyMethod();



 var t3 = Task.WhenAll(new []{t1,t2 });


 Console.WriteLine($"Task from WhenAll: {t3.IsCompleted}");



結果:


Returned task: True


Awaited task: True



Returned task: True


Awaited task: True



Task from WhenAll: True



因此:是的,如果非同步方法同步運行,則返回的任務就完成了,是的,從WhileAll返回的傳遞的非同步運行的非同步方法也已經完成。

async方法的開始執行與其他方法一樣,也就是說,它會同步運行,直到遇到「 await 」(或引發異常)為止。

「 await 」關鍵字是事物可以非同步進行的地方,Await類似於一元運算符: 它只有一個參數,一個awaitable (一個「 awaitable 」是一個非同步操作),檢查等待是否已經完成; 如果等待已完成,那麼這個方法繼續運行(同步,就像常規方法一樣)。

原作者:
...