使用 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 个调用将彼此同步执行。我将如何让它们同时执行并在完成时加入结果?
我将如何让它们并行执行并在完成时加入结果?
The simplest方法只是创建所有任务然后等待它们:
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 http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.whenall%28v=vs.110%29.aspx。您需要考虑多个任务失败的可能性......使用上面的代码您不会观察到失败task3
例如,如果task2
失败 - 因为你的异步方法将从中传播异常task2
在你等待之前task3
.
我在这里并不是建议特定的策略,因为这将取决于您的具体情况。您可能只关心成功/失败和日志记录one失败的原因,在这种情况下上面的代码就可以了。否则,您可能会将延续附加到原始任务以记录all例如,例外情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)