c# – 异步方法的并发执行

前端之家收集整理的这篇文章主要介绍了c# – 异步方法的并发执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用async / await模型,我有一个方法,它对Web服务进行3次不同的调用,然后返回结果的并集.
var result1 = await myService.GetData(source1);
var result2 = await myService.GetData(source2);
var result3 = await myService.GetData(source3);

allResults = Union(result1,result2,result3);

使用典型等待,这3个调用将彼此同步执行.我将如何让它们同时执行并在完成后加入结果?

解决方法

How would I go about letting them execute in parallel and join the results as they complete?

最简单的方法就是创建所有任务然后等待它们:

var task1 = myService.GetData(source1);
var task2 = myService.GetData(source2);
var task3 = myService.GetData(source3);

// Now everything's started,we can await them
var result1 = await task1;
var result1 = await task2;
var result1 = await task3;

您可能还会考虑Task.WhenAll.您需要考虑多个任务失败的可能性…使用上面的代码您不会观察到task3的失败,例如,如果task2失败 – 因为您的异步方法将传播异常在等待task3之前从task2.

我不是在这里建议一个特定的策略,因为它取决于你的具体情况.您可能只关心成功/失败并记录一个失败原因,在这种情况下上面的代码是正常的.否则,您可以将延续连接到原始任务以记录所有异常,例如.

猜你在找的C#相关文章