等待和异步行为

本文关键字:异步 等待 | 更新日期: 2023-09-27 18:13:23

给出这个例子:

void Main() { Test().Wait(); }
async Task Test()
{
    Console.WriteLine("Test A");
    await AsyncFunction();
    // It doesn't matter where the await is in AsyncFunction, it will always wait for the function to complete before executing the next line.
    Console.WriteLine("Test B");
}
async Task AsyncFunction()
{
    Console.WriteLine("AsyncFunction A");
    await Task.Yield();
    Console.WriteLine("AsyncFunction B");
}

在任何情况下"Test B"都不会显示在"AsyncFunction B"之前

Test()中的await语句不只是等待Task.Yield()完成恢复,而是等待整个AsyncFunction完成?

等待和异步行为

在任何情况下"Test B"将显示在"AsyncFunction B"之前?

不,那不会发生的。

Test()中的await语句不只是等待Task.Yield()完成恢复,而是等待整个AsyncFunction完成?

这是正确的。由于您正在等待AsyncFunction,因此一旦方法执行完成,控制将恢复。如果不等待,则一旦从await Task.Yield

返回控制,将执行下一行。