c# - C# - 在异步方法中,等待已完成的任务

当调用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();


}



时间: 作者:

这很容易被测试:


 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 ”是一个异步操作),检查等待是否已经完成; 如果等待已完成,那么这个方法继续运行(同步,就像常规方法一样)。

作者:
...