Asynchrone Programmierung umfasst häufig await
und Task.Run
, was zu potenzieller Verwirrung führen kann. Dieser Artikel verdeutlicht ihre Unterschiede anhand eines konkreten Beispiels.
Lassen Sie uns diese Codeausschnitte analysieren:
<code class="language-csharp">await Task.Run(() => LongProcess());</code>
<code class="language-csharp">await LongProcess();</code>
LongProcess
ist eine asynchrone Methode, die mehrere Datenbankaufrufe mit await ExecuteReaderAsync()
ausführt.
Es ist wichtig klarzustellen, dass async
/await
nicht automatisch mehrere Threads erstellt. Ein einziger Thread kümmert sich um alles.
Async
/await
ermöglicht einem Thread, andere Aufgaben auszuführen, während er auf asynchrone Vorgänge wartet. Stellen Sie sich einen Koch vor, der mehrere Aufgaben gleichzeitig erledigt: Gemüse schneiden und den Ofen kontrollieren. Der Thread wechselt auf ähnliche Weise zwischen Aufgaben, bis er auf await
trifft, und nimmt danach die Ausführung wieder auf.
Task.Run
ist nützlich, wenn ein asynchroner Vorgang gestartet wird, ohne sofort auf seinen Abschluss zu warten. Dies ist von Vorteil, wenn die Thread-Reaktionsfähigkeit für Benutzereingaben oder andere Aufgaben aufrechterhalten wird, während der asynchrone Vorgang ausgeführt wird.
In diesem Beispiel liefern beide Ansätze identische Ergebnisse. await Task.Run(...)
führt den asynchronen Vorgang in einem separaten Thread aus, der von Task.Run
verwaltet wird. Der aktuelle Thread wartet jedoch immer noch auf den Abschluss, was funktional dem direkten Warten auf LongProcess
entspricht.
Die Beherrschung der Nuancen von async
/await
ist für eine effiziente asynchrone Programmierung von entscheidender Bedeutung. In diesem speziellen Fall erzielen sowohl await Task.Run(...)
als auch await
das gleiche Ergebnis. Die optimale Wahl hängt davon ab, ob die Aufrechterhaltung der Reaktionsfähigkeit des aktuellen Threads während des asynchronen Vorgangs erforderlich ist.
Das obige ist der detaillierte Inhalt vonAwait Task.Run(() => ...) vs. Await LongProcess(): Wann sollten Sie beide verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!