Asynchrone Fire-and-Forget-Operationen in C#: Async/Await vs. traditionelle Methoden
Die Fire-and-Forget-Methode ist ideal für asynchrone Vorgänge, die keine explizite Ablaufverfolgung erfordern. In C# gibt es zwei Hauptansätze: traditionelle asynchrone Delegaten und die neuere Async/Await-Syntax.
Rezension von Async/Await
Die Async/Await-Syntax vereinfacht Fire-and-Forget-Vorgänge und macht den manuellen Aufruf von EndInvoke() und das Schließen des Handles überflüssig. Es erfordert jedoch ein explizites Warten auf die Aufgabe in der Zielmethode. Dies kann für vorhandene synchrone Methoden, die in asynchrone konvertiert werden müssen, unpraktisch sein.
Überlegungen zur Leistung und Bereinigung
Async/await sieht zwar sauberer aus, bietet aber nicht unbedingt nennenswerte Leistungsvorteile. Bei beiden Methoden wird ein neuer Thread-Pool-Thread zugewiesen, um den Vorgang auszuführen.
Asynchrone Aufrufe synchroner Methoden
Die Fire-and-Forget-Konvertierung mit async/await ist nicht einfach, wenn die Hintergrundmethode nicht geändert werden kann. Eine Problemumgehung besteht darin, eine asynchrone Wrapper-Methode zu erstellen, die wie folgt auf Task.Run() für die synchrone Methode wartet:
<code class="language-csharp">async Task DoAsync(string entry) { await Task.Run(() => DoIt(entry)); }</code>
Es wird empfohlen, die Verwendung von Async Void zu vermeiden
Wie die Antwort zeigt, ist die Fehlerbehandlung von asynchronen Void-Methoden unvorhersehbar und sollte nach Möglichkeit vermieden werden.
Vereinfachen Sie Fire-and-Forget mit Task.Run()
Für größtmögliche Einfachheit sollten Sie erwägen, Task.Run() direkt zu verwenden, um synchrone Methoden nach dem Prinzip „Fire-and-Forget“ ohne Async/Wait auszuführen:
<code class="language-csharp">Task.Run(() => DoIt(entry));</code>
Dieser Ansatz emuliert das Verhalten des „alten asynchronen Delegaten“ ohne den Aufwand, EndInvoke() manuell aufzurufen und das Handle zu schließen.
Das obige ist der detaillierte Inhalt vonAsynchrone Fire-and-Forget-Vorgänge: Async/Await im Vergleich zum „alten asynchronen Delegate' – was ist besser?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!