等待和异步行为

时间:2015-09-19 15:40:34

标签: c# .net asynchronous async-await task-parallel-library

给出这个例子:

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");
}

在任何情况下"测试B"将在" AsyncFunction B"

之前显示

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

1 个答案:

答案 0 :(得分:7)

  

在“异步功能B”之前,“测试B”是否会显示?

不,那不会发生。

  

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

没错。由于您正在等待AsyncFunction,因此一旦方法完成执行,控制将恢复。如果您没有等待它,那么从await Task.Yield

返回控件后,将执行下一行