У меня есть несколько тысяч независимых задач, которые нужно запустить. Каждый из них может выполнять вызовы базы данных, поэтому они, по возможности, уже используют async. Тем не менее, если бы я хотел, чтобы все они работали параллельно, что это лучший способ сделать это?Лучший способ запуска нескольких асинхронных задач параллельно?
Я получил это в настоящее время:
Parallel.For(0, items.Count, async _ => await PerformTask());
Я также рассматривал возможность использования:
List<Task> tasks = new List<Task>();
for(var i = 0; i < items.Count; ++i) tasks.Add(PerformTask());
await Task.WhenAll(tasks); // or possibly Task.WaitAll(tasks.ToArray())
Есть объективно лучший способ сделать это?
Редактировать: Это отличается от отмеченного дублирующегося вопроса, так как я не прошу разницы. Я спрашиваю, какой путь правильный для моего варианта использования.
Возможный дубликат [Parallel.ForEach vs Task.Run and Task.WhenAll] (http://stackoverflow.com/questions/19102966/parallel-foreach-vs-task-run-and-task-whenall) – Liam
для последняя часть, 'Task.WhenAll', вероятно, предпочтительнее, так как она возвращает задачу. 'Task.WaitAll' возвращает void и блокирует до полного завершения. – Jonesopolis
@ Liam, а не дубликат, см. Править. Ответы на связанный ответ фактически не указывают, что следует использовать при определенных обстоятельствах. И не похоже, что есть ответ «только так». – Charles