c# – 当我“等待”一个“异步”方法是否同步?

所以这里是场景:

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”是否同步运行,因为我们正在使用等待,还是按照执行顺序异步运行?

UPDATE

给定下面的答案,表示等待已久的异步方法将顺序运行,如果我们只是要停止执行并等待这些方法的返回值,那么首先将这些方法调用为异步的目的是什么?我以前看过本地应用程序使用等待/异步方式来释放UI线程,但是有什么其他的原因可能是这种设计呢?

最佳答案
他们正在异步运行,但顺序运行。 someAsyncMethod将不会被调用,直到someAsyncMethod完成。

如果你想并行运行它们,你有几个选择

var taskA = MethodA();
var taskB = MethodB();

var a = await taskA;
var b = await taskB;

// or

var results = await Task.WhenAll(MethodA(), MethodB());

后续问题:

I have seen native apps in the past use await/async as a means to free up the UI thread, but are there any other reasons why this design would be desirable?

在ASP.NET应用程序中,您将需要使用此选项来允许当前线程返回到线程池并提供其他传入请求,而MethodA / MethodB正在运行 – 如果这些方法正在执行真正的异步I / O。这基本上是您在ASP.NET应用程序中执行此操作的唯一原因。

你可能还想读Stephen Cleary的:

> Task.Run Etiquette Examples: Don’t Use Task.Run in the Implementation
> There Is No Thread

转载注明原文:c# – 当我“等待”一个“异步”方法是否同步? - 代码日志