C# 等待其中的 (2)

本文关键字:等待 | 更新日期: 2023-09-27 18:34:42

我有 2 个等待运行以从外部服务获取数据:

aaa= await Gateway.GetMyAAA();
bbb= await Gateway.GetBBBB();
我希望两者都同时

运行,然后在两者都完成后继续。

我如何等待他们?

C# 等待其中的 (2)

var results = await Task.WhenAll(task1, task2);

results是结果的数组,并且

results[0]是任务的结果1

在获取对所有任务的引用之前,不要使用 await。 然后一次将它们全部await

Task aaa = Gateway.GetMyAAA();
Task bbb = Gateway.GetBBBB();
await Task.WhenAll(aaa, bbb);
'all tasks are complete at this time. now we get the results
var aaaResult = await aaa;
var bbbResult = await bbb;

首先,您需要保存Task实例,而不是直接等待它们:

Task aaaTask = Gateway.GetMyAAA(), bbbTask = Gateway.GetMyBBBB();

然后,您在一次调用中等待两个(所有(WhenAll()

await Task.WhenAll(aaaTask, bbbTask);

最后,检索结果:

aaa = await aaaTask;
bbb = await bbbTask;

请注意,最终的 await 语句将同步完成。await语句主要是为了编译器自动解压缩可能发生的任何异常,并导致它们"正常"抛出,而不是在聚合异常中抛出。