我有可能需要运行几千个独立的任务。他们每个人都可能进行数据库调用,所以他们已经在可能的情况下利用异步。也就是说,如果我想让他们全部平行运行,那么最好的方法是什么?最好的方式来并行启动几个异步任务?
我有了这个目前:
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.For(0, items.Count, async _ => await PerformTask());
我还用考虑?
编辑:这是不同于标记的重复问题,因为我没有问差异。我在问我的用例是哪种方式是正确的。
[Parallel.ForEach vs Task.Run and Task.WhenAll](http://stackoverflow.com/questions/19102966/parallel-foreach-vs-task-run-and-task-whenall) – Liam
for最后一部分'Task.WhenAll'可能更可取,因为它会返回一个任务。 'Task.WaitAll'返回void,并将阻塞直到全部完成。 – Jonesopolis
@Liam,不重复,请参阅编辑。链接答案的答案实际上没有说明在特定情况下应该使用什么。而且似乎并没有一套“只有这样做”的答案。 – Charles