这与下面的帖子有关:为什么要一直使用Async/await。
我很好奇在以下情况下会发生什么:
因评论而更新:
async Task FooAsync()
{
await Func1();
// do other stuff
}
Task Func1()
{
return Func2();
}
async Task Func2()
{
await tcpClient.SendAsync();
// do other stuff
}
整个过程是否成为阻塞调用? 或者因为 Func1() 实际上是在等待,UI 可以去处理其他事情吗? 最终是否有必要在 Func1() 上添加 async/await? 我已经玩过它,但我实际上没有注意到任何差异,因此问题。 任何见解都会很棒,谢谢!
Async
和await
只是编译器的功能。
如果没有await
调用异步方法将导致它以同步(阻塞)方式执行。
当您编写await
编译器自动将下面的所有代码await
包装在Task.ContinueWith()
方法中时,这意味着当任务完成时,下面的代码稍后执行
public async Task<int> method2(){
return Task.FromResult(1);
}
public void method1(){
await method2()
Console.WriteLine("Done");
}
将翻译如下内容:
public Task<int> method2(){
return Task.FromResult(1);
}
public void method1(){
method2().ContinueWith(x => {
Console.WriteLine("Done");
});
}
不制作Func1
和async
方法并且不在其中await
Func2
的唯一问题是任何抛出的异常都不会显示Func1
。
底线是await
工作在可厌和Task
/Task<T>
是可厌的。