按顺序执行多个异步方法调用

本文关键字:异步方法 调用 顺序 执行 | 更新日期: 2023-09-27 18:30:43

似乎

我过去遇到过这个问题的答案,但现在我找不到它。

假设我有两个异步方法,方法1和方法2。 如果我需要依次调用方法1,然后调用方法2(阅读,方法1必须在方法2之前完成),以下代码是否正确?

await Method1();
await Method2();

根据此处另一个 SO 问题的已接受答案中的信息以及此处 MSDN 文章中的信息,我相信这是正确的方法。 此外,这段代码似乎有效,但我不想引入一个微妙的错误,以后会更难追踪。

按顺序执行多个异步方法调用

是的,这是正确的方法。它们将按顺序执行。

来自 msdn 的重要引述:

await 运算符告诉编译器,在等待的异步进程完成之前,异步方法不能继续超过该点

如果你想并行执行它们,你必须使用这样的东西:

var t1 = DoTaskAsync(...);
var t2 = DoTaskAsync(...);
var t3 = DoTaskAsync(...);
await Task.WhenAll(t1, t2, t3);
我知道

这个线程有点旧,但我想添加一个我在使用异步方法时遇到的问题。

这纯粹是为了洞察力,也是我通过反复试验发现的。

如果创建 void() 方法,则无法await它,除非像下面这样调用该方法:

await Task.Run(() => Method());

。使用方法声明:

void Method() {...}

使用 await Task.Run 调用函数可执行多个方法,而无需等待任何先前的函数执行。

例如,如果您有:

void Method1() {...}
void Method2() {...}
void Method3() {...}

你这样称呼他们:

await Task.Run(() => Method1());
await Task.Run(() => Method2());
await Task.Run(() => Method3());

await 操作不会等待方法 1 完成,然后再调用方法 2 等。

要克服这个问题,请像这样创建函数:

async Task Method1() {...}
async Task Method2() {...}
async Task Method3() {...}

并像这样称呼它们:

await Method1();
await Method2();
await Method3();