假設使用一個非同步API客戶端,它會傳回Task或Task
<code class="language-csharp">static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // 调用API客户端 Console.WriteLine("已删除帖子 {0}.", siteId); }</code>
目標是同時啟動多個非同步任務並等待它們完成。兩種常用的方法是Parallel.ForEach和Task.WaitAll。
雖然Parallel.ForEach和Task.WaitAll都嘗試並行執行任務,但它們有其限制。
為了克服這些限制,我們建議使用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>
在這種情況下,由於任務完成後沒有後續操作,因此不需要await。以下簡化的程式碼就夠了:
<code class="language-csharp">public Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
有關這些方法的更多見解和比較,請參閱綜合部落格文章:「如何以及在何處使用ASP.NET Web API進行並發非同步I/O」。
以上是如何在 C# 中有效率地使用 Async/Await 執行多個平行任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!