Angenommen, es wird ein asynchroner API-Client verwendet, der Task oder Task zurückgibt
<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>
Das Ziel besteht darin, mehrere asynchrone Aufgaben gleichzeitig zu starten und auf deren Abschluss zu warten. Zwei häufig verwendete Methoden sind Parallel.ForEach und Task.WaitAll.
Während Parallel.ForEach und Task.WaitAll beide versuchen, Aufgaben parallel auszuführen, weisen sie Einschränkungen auf.
Um diese Einschränkungen zu überwinden, empfehlen wir die Verwendung von Task.WhenAll, das Aufgaben asynchron und parallel ausführen kann. Der folgende Code demonstriert seine Verwendung:
<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>
In diesem Fall ist Warten nicht erforderlich, da nach Abschluss der Aufgabe keine Folgevorgänge erfolgen. Der folgende vereinfachte Code reicht aus:
<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>
Weitere Einblicke und Vergleiche dieser Ansätze finden Sie im umfassenden Blogbeitrag: „How and Where to Use ASP.NET Web API for Concurrent Asynchronous I/O“.
Das obige ist der detaillierte Inhalt vonWie kann ich Async/Await effizient für mehrere parallele Aufgaben in C# verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!