gpt4 book ai didi

c# - 没有 async/await 的嵌套 Task 调用

转载 作者:行者123 更新时间:2023-11-30 16:04:00 28 4
gpt4 key购买 nike

这与以下帖子有点相关: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() 上添加异步/等待?我玩过它,但实际上我没有注意到任何区别,因此出现了这个问题。任何见解都会很棒,谢谢!

最佳答案

Asyncawait 只是编译器特性。

没有await调用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");
});
}

关于c# - 没有 async/await 的嵌套 Task<T> 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35876574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com