Есть ли разница между вложением нескольких Task.WhenAll и сведением всех задач в одну Task.WhenAll? - PullRequest
0 голосов
/ 23 октября 2018

Иногда я хочу ждать кучу задач параллельно, но сами задачи зависят от некоторого условия.Я мог бы написать

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 Ответ

0 голосов
/ 23 октября 2018

Я думаю, что они одинаковы - ОДНАКО я бы порекомендовал первую версию, а не вторую, исключительно для удобства чтения / понимания - ошибочно думать, что OnlyDoOtherStuffAsync будет работать только после того, как DoThisAsync () и DoThatAsync () завершат работу во второйверсия, если вы прочитаете ее случайно, где все три фактически будут работать параллельно.

...