加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:28:45 所属栏目:百科 来源:网络整理
导读:使用async / await模型,我有一个方法,它对Web服务进行3次不同的调用,然后返回结果的并集. var result1 = await myService.GetData(source1);var result2 = await myService.GetData(source2);var result3 = await myService.GetData(source3);allResults = U
使用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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读