Effiziente Bewältigung mehrerer asynchroner Aufgaben in C#
Beim Umgang mit asynchronen API-Clients ist es entscheidend, den effizientesten Weg zum Starten mehrerer Aufgaben und zum Synchronisieren ihrer Erledigung zu ermitteln. In diesem Artikel werden zwei gängige Techniken untersucht und eine empfohlene Alternative für maximale Leistung vorgestellt.
Gemeinsame Methoden
Verwenden Sie Parallel.ForEach
und .Wait()
:
<code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>
Dieser Ansatz führt Vorgänge parallel aus, blockiert jedoch den Thread jeder Aufgabe, bis er abgeschlossen ist. Wenn ein Netzwerkaufruf daher viel Zeit in Anspruch nimmt, bleibt der Thread im Leerlauf.
Verwenden Sie Task.WaitAll
:
<code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>
Dieser Code wartet auf den Abschluss aller Aufgaben und blockiert den aktuellen Thread, bis alle Vorgänge abgeschlossen sind.
Empfohlene Methode
Für eine optimale asynchrone Ausführung wird die Verwendung von 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>
Diese Methode startet Aufgaben parallel und ermöglicht es dem aktuellen Thread, weiterhin andere Aufgaben auszuführen, während er auf deren Abschluss wartet. Dadurch wird die CPU-Auslastung optimiert und die Reaktionsfähigkeit aufrechterhalten.
Für maximale Einfachheit des Codes, ohne Wartezeiten, reicht der folgende Code 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>
Durch die Verwendung von Task.WhenAll
können Sie mehrere asynchrone Vorgänge effizient parallel ausführen, ohne die Thread-Effizienz oder die Reaktionsfähigkeit des Systems zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWas ist die effizienteste Möglichkeit, mehrere asynchrone Aufgaben in C# zu bearbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!