按顺序执行多个异步方法调用
本文关键字:异步方法 调用 顺序 执行 | 更新日期: 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();