嵌套任务调用,无需异步/等待
作者:互联网
这与以下帖子有关:Why use Async/await all the way down
我很好奇在以下情况下会发生什么:
由于评论已更新:
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?我玩过它,但实际上并没有发现任何区别,因此是个问题.任何见解都会很棒,谢谢!
解决方法:
异步和等待只是编译器功能.
不等待调用异步方法将导致它执行同步(阻塞)方式.
当您编写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");
});
}
标签:asynchronous,async-await,c 来源: https://codeday.me/bug/20191118/2032216.html