例如,在下面的代码中,最后一个方法M2Async是同步的,没有async / await,否则需要在await之后调用M3Async并且调用图将继续?
为清楚起见(来自果壳中的C#):
异步操作在返回调用者后完成(大部分或全部)其工作。
public void Main() { 任务任务= M1Async(); // 一些工作 int i = task.result; //使用我等 }
私有异步任务M1Async() { int i =等待M2Async(); // 一些工作 回归我; }
私有任务M2Async() { return Task.FromResult(2); }
答案 0 :(得分:4)
这取决于你的意思"同步"。在某些方面,所有方法都是同步的(即使是async
个) - 它们只是同步返回一些可以等待的东西,一旦等待就可能有更多的事情要做。
不,它不必同步;你的代码也可以是:
private async Task<int> M2Async()
{
return await Task.FromResult(2);
}
甚至只是(虽然编译器会检测到这是一种气味,并且是秘密同步的):
private async Task<int> M2Async()
{
return 2;
}
这两者都不是特别有用,但是;他们会工作的。实际上,大多数async
方法都会以async
IO - 文件系统,网络等方式进行操作。在您的示例中,实际上没有任何内容真正属于async
无论如何 - 当达到await
时,它将全部完成。