如果您有一个异步函数:
现在,第一个await可以防止方法阻塞调用上下文,因此非常有用。
但是,在DoSomeWorkAsync完成后,该方法仍然在不同的上下文中运行,因为编译器已将其转换为类似于Task.ContinueWith(await DoSomeMoreWorkAsync())的代码。
所以,等待DoSomeMoreWorkAsync并异步运行它是否有任何目的?有没有任何缺点?如果存在DoSomeMoreWorkAsync的非异步版本,我应该使用它吗?
也就是说,这种做法有什么劣势:
public async Task DoWork()
{
await DoSomeWorkAsync();
await DoSomeMoreWorkAsync();
}
现在,第一个await可以防止方法阻塞调用上下文,因此非常有用。
但是,在DoSomeWorkAsync完成后,该方法仍然在不同的上下文中运行,因为编译器已将其转换为类似于Task.ContinueWith(await DoSomeMoreWorkAsync())的代码。
所以,等待DoSomeMoreWorkAsync并异步运行它是否有任何目的?有没有任何缺点?如果存在DoSomeMoreWorkAsync的非异步版本,我应该使用它吗?
也就是说,这种做法有什么劣势:
public async Task DoWork()
{
await DoSomeWorkAsync();
DoSomeMoreWork();
}
编辑:这不是与单个方法中的多个等待相同的问题。那是在问会发生什么。我在问,这样做有没有任何优势。
DoSometWork
,当它完成时执行DoSomeMoreWork
。只有后者完成,由asny方法返回的整个任务才会完成。 - MakePeaceGreatAgain