多次嵌套Task.WhenAll和将所有任务展开成一个Task.WhenAll有区别吗?

3
有时我想并行等待一堆任务,但这些任务本身又取决于某些条件。我可以这样写:
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;

这两个版本的行为有什么区别吗?哪个更受欢迎或更符合惯用语?

1个回答

2

我认为它们是相同的-然而,基于可读性/易理解性,我建议使用第一个版本而不是第二个版本-如果你太随意地阅读第二个版本,很容易错误地认为AlsoDoOtherStuffAsync只会在DoThisAsync()和DoThatAsync()都完成后运行,但实际上这三个任务将同时运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接