C# 等待其中的 (2)
本文关键字:等待 | 更新日期: 2023-09-27 18:34:42
我有 2 个等待运行以从外部服务获取数据:
aaa= await Gateway.GetMyAAA();
bbb= await Gateway.GetBBBB();
我希望两者都同时运行,然后在两者都完成后继续。
我如何等待他们?
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
语句主要是为了编译器自动解压缩可能发生的任何异常,并导致它们"正常"抛出,而不是在聚合异常中抛出。