我有可能需要运行数千个独立任务。每个任务都可能会进行数据库调用,因此它们已经在可能的情况下利用了异步处理。也就是说,如果我想让它们全部并行运行,最好的方法是什么?
目前我的写法是这样的:
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())
是否有一种客观最佳方法来实现这个?
编辑:这与已标记的重复问题不同,因为我不是在问区别,而是在问哪种方式对我的用例是正确的。
Task.WhenAll
可能更好,因为它返回一个任务。Task.WaitAll
返回 void,并且会阻塞直到所有任务完成。 - Jonesopolis