有时我想并行等待一堆任务,但是任务本身取决于某些条件。我会写
var tasks = new List<Task> { DoThisAsync(), DoThatAsync() };
if (condition) tasks.Add(AlsoDoOtherStuffAsync());
await Task.WhenAll(tasks);
但是如果我写
var task = Task.WhenAll(DoThisAsync(), DoThatAsync());
if (condition) task = Task.WhenAll(task, AlsoDoOtherStuffAsync());
await task;
两个版本之间的行为是否有差异?是一种偏爱的习惯或方式吗?
答案 0 :(得分:2)
我认为它们是相同的-但是出于纯粹的可读性/可理解性,我还是建议第二个版本优先使用-容易误认为AlsoDoOtherStuffAsync仅在DoThisAsync()和DoThatAsync()都在第二个版本中完成之后才运行版本,如果您不经意地阅读它,那么实际上这三个版本实际上都是并行运行的。