【发布时间】:2018-03-05 19:34:40
【问题描述】:
如果你有异步函数:
public async Task DoWork()
{
await DoSomeWorkAsync();
await DoSomeMoreWorkAsync();
}
现在第一个 await 可以防止方法阻塞调用上下文,所以很有用。
但在DoSomeWorkAsync 完成后,该方法无论如何都会在不同的上下文中运行,因为在编译器中它已被转换为Task.ContinueWith(await DoSomeMoreWorkAsync()) 之类的东西。
那么他们等待DoSomeMoreWorkAsync/异步运行它有什么目的吗?有什么缺点吗?如果存在,我应该使用DoSomeMoreWorkAsync 的非异步版本吗?
即。这是否有任何不利之处:
public async Task DoWork()
{
await DoSomeWorkAsync();
DoSomeMoreWork();
}
编辑:这与Multiple Awaits in a single method 不是同一个问题。那问会发生什么。我在问这样做有什么好处。
【问题讨论】:
-
@HimBromBeere:这与现有问题不同。那问会发生什么。我在问这种情况有什么好处。我在问这个问题之前看过这个问题。
-
嗯,重点显然是您的 asnyc 方法应该执行 多个 步骤。对于您的呼叫成员,这些步骤是隐藏的,因为它对您的方法的内部一无所知。然而,对于后者,它只是一个接一个的流程流程。因此,对于 asnyc 方法,您有一些子任务应该同步执行,这意味着:首先执行
DoSometWork,然后在完成时执行DoSomeMoreWork。只有后者完成了,asny方法返回的整个任务才完成。
标签: c# asynchronous async-await