mdl*_*ars 22 c# asynchronous async-await
所以这是场景:
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;
}
Run Code Online (Sandbox Code Playgroud)
"someAsyncMethod"和"someOtherAsyncMethod"是否同步运行,因为我们正在使用await,或者它们是否按照执行顺序异步运行?
UPDATE
鉴于以下答案说明等待的异步方法将按顺序运行,如果我们只是停止执行并等待那些方法的返回值,那么首先使这些方法调用异步的目的是什么?我曾经看过过去的原生应用程序使用await/async作为释放UI线程的方法,但是有没有其他原因可以解释为什么这个设计是可取的呢?
dca*_*tro 28
它们是异步运行的,但是顺序运行.someOtherAsyncMethod
在someAsyncMethod
完成之前不会被调用.
如果要并行运行它们,您有几种选择
var taskA = MethodA();
var taskB = MethodB();
var a = await taskA;
var b = await taskB;
// or
var results = await Task.WhenAll(MethodA(), MethodB());
Run Code Online (Sandbox Code Playgroud)
后续问题:
我曾经看过过去的原生应用程序使用await/async作为释放UI线程的方法,但是有没有其他原因可以解释为什么这个设计是可取的呢?
在ASP.NET应用程序中,您将需要使用它来允许当前线程返回到线程池并在MethodA
/ MethodB
正在运行时提供其他传入请求- 如果这些方法正在执行真正的异步I/O. 这基本上是你在ASP.NET应用程序中执行此操作的唯一原因.
您可能还想阅读Stephen Cleary的:
归档时间: |
|
查看次数: |
4039 次 |
最近记录: |