我有可能需要運行幾千個獨立的任務。他們每個人都可能進行數據庫調用,所以他們已經在可能的情況下利用異步。也就是說,如果我想讓他們全部平行運行,那麼最好的方法是什麼?最好的方式來並行啓動幾個異步任務?
我有了這個目前:
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