C#中高效執行多個非同步任務
在處理非同步程式碼時,選擇最有效的方法來並發執行多個任務至關重要。本文探討了實現此目標的兩種常用方法:Parallel.ForEach
結合Wait()
和Task.WaitAll()
。
使用Parallel.ForEach和Wait()
Parallel.ForEach()
結合Wait()
可以並行啟動多個任務,但會阻塞每個參與的線程,直到任務完成。當網路操作佔用大量時間時,這種方法效率低下,因為每個執行緒都會長時間處於空閒狀態。
使用Task.WaitAll()
Task.WaitAll()
也會阻塞目前線程,直到所有任務都完成。雖然此方法確保所有任務在繼續之前都已完成,但它會阻止當前執行緒執行其他工作。
推薦方法:Task.WhenAll()
為了有效率地執行多個非同步任務,建議使用Task.WhenAll()
。此方法並發啟動任務,而不會阻塞任何執行緒。隨著任務完成,它們會自動等待,允許當前執行緒繼續處理。
以下是用Task.WhenAll()
的範例:
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
透過使用Task.WhenAll()
,上述方法非同步執行所有任務,而不會阻塞目前執行緒。為了進一步優化效能,如果沒有任何後續操作,可以避免使用await
並直接從方法返回。
更多資源
要更深入地了解這些替代方案,請參閱以下部落格文章:
以上是如何在C#中高效率執行多個非同步任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!