【发布时间】:2018-06-14 10:19:02
【问题描述】:
我有两个任务可以并行运行以提高性能:
var task1 = _service.DoStuffAsync();
var task2 = _service.DoOtherStuffAsync();
await Task.WhenAll(task1, task2);
现在,我确信这些任务已经完成。但根据我的理解(以及一些现实生活中的头痛),如果我在这些任务上调用.Result,我可能会导致死锁,即使它们已经完成?
根据我所阅读的内容,awaiting 完成的任务只会返回结果,所以看起来这就是要走的路。这让我的代码看起来很时髦:
var task1 = _service.DoStuffAsync();
var task2 = _service.DoOtherStuffAsync();
await Task.WhenAll(task1, task2);
var result1 = await task1;
var result2 = await task2;
这是解决此问题并获得我的两项任务结果的正确方法吗?如果不是,有什么问题?有没有更好的方法来解开任务而不调用.Result?
【问题讨论】:
-
仅供参考,
async不平行 -
Task.WhenAll是我指的并行部分 -
@maccettura 不,不是,但这里显示的代码 是,因为它启动多个异步操作而不等待其他操作完成,导致它们并行工作.
-
@Jonesopolis
WhenAll不会使工作并行运行。使其并行运行的原因是在另一项任务完成之前启动一项任务。 -
你是对的。这就是我的意思 - 允许启动多个任务并等待它们全部完成。
标签: c# async-await task