【发布时间】:2015-12-05 14:00:10
【问题描述】:
所以这里是场景:
static async void Main(string[] args)
{
await AnAsyncMethod();
}
private static async task<bool> AnAsyncMethod()
{
var x = await someAsyncMethod();
var y = await someOtherAsyncMethod();
return x == y;
}
“someAsyncMethod”和“someOtherAsyncMethod”是因为我们正在使用等待而同步运行,还是它们都按照执行顺序异步运行?
更新
鉴于下面的答案表明等待的异步方法将按顺序运行,如果我们只是要停止执行并等待这些方法的返回值,那么首先使这些方法调用异步的目的是什么?过去我看到原生应用程序使用 await/async 作为释放 UI 线程的一种方式,但是还有其他原因可以说明这种设计是可取的吗?
【问题讨论】:
-
小旁注
Main不能使用await,因为它本身没有标记为async -
我的理解是 someAsyncMethod 将在 someOtherAsyncMethod 开始之前完全完成。
-
@Biscuits 甚至不是这样 - await 与方法(或它们的任务)的执行方式无关;它只是处理任务完成时发生的事情。如果我想通过添加一个简单的扩展方法,我可以等待一个可枚举的。它与线程无关(实际上与任务无关)。
-
@dcastro 感谢您的深入跟进!
-
what would be the purpose of making those method calls asynchronous in the first place我希望更多人问这个问题...也许你会喜欢我关于何时使用异步 IO 以及为什么使用的标准帖子:stackoverflow.com/a/25087273/122718 为什么 EF 6 教程使用异步调用? stackoverflow.com/a/12796711/122718我们应该切换到默认使用异步 I/O 吗?
标签: c# asynchronous async-await