Heim > Backend-Entwicklung > C++ > Fire and Forget vs. Awaiting in Async/Await: Was ist der Unterschied und wann sollten Sie beide verwenden?

Fire and Forget vs. Awaiting in Async/Await: Was ist der Unterschied und wann sollten Sie beide verwenden?

Barbara Streisand
Freigeben: 2025-01-12 13:17:42
Original
875 Leute haben es durchsucht

Fire and Forget vs. Awaiting in Async/Await: What's the Difference and When Should You Use Each?

Fire and Forget and Awaiting in Async/Await: Unterschiede und Nutzungsszenarien

Der folgende Code zeigt die verschiedenen Möglichkeiten zum Aufrufen der Callee-Methode und ihre Verhaltensunterschiede.

Ruf Nr. 1: Feuern und vergessen (einfach)

Callee Die Methode wird asynchron aufgerufen und blockiert den Aufrufer nicht.

Anruf Nr. 2: Warten auf Aufgabe (Verzögerung)

Die Methode

Callee verwendet das Schlüsselwort await und der Aufrufer wartet, bis der Vorgang abgeschlossen ist. Da die Callee-Methode eine Verzögerung von 1000 ms enthält, dauert es für den Aufrufer mehr als eine Sekunde.

Aufruf Nr. 3 und Nr. 5: Task.Run (Fire and Forget)

Task.Run Sendet die Callee-Methode zur Ausführung an den Thread-Pool. Da await nicht verwendet wird, sind beide Anrufe „Fire“ und „Forget“ und blockieren den Anrufer nicht.

Aufruf Nr. 4 und Nr. 6: Task.Run (Aufgabe warten)

Ähnlich wie #3 und #5, aber Task.Run verwendet await intern. Dies entspricht Nr. 2: Der Aufrufer wartet, bis die Aufgabe abgeschlossen ist.

Der Unterschied zwischen #3 und #5

Während Nr. 3 und Nr. 5 beide Task.Run verwenden, gibt es subtile Unterschiede. In #3 wird Callee direkt aufgerufen, um eine neue Aufgabe im Thread-Pool zu erstellen. In #5 wird Callee in einen asynchronen Lambda-Ausdruck eingeschlossen, der eine neue Aufgabe mit einer eigenen Zustandsmaschine erstellt. Da es sich bei beiden Missionen jedoch um „Fire and Forget“ handelt, ist der Unterschied in diesem Fall nicht signifikant.

Hinweise zu Service Fabric

Nach der Migration zu Service Fabric wird HostingEnvironment.QueueBackgroundWorkItem nicht mehr unterstützt. Obwohl es möglich ist, Task.Run als Alternative zu verwenden, ist es besser, einen separaten Hintergrundprozess zu verwenden und mit diesem über eine Warteschlange zu kommunizieren. Dies stellt die Isolierung zwischen Front-End- und Back-End-Diensten sicher und verhindert Leistungsprobleme oder Deadlocks.

Das obige ist der detaillierte Inhalt vonFire and Forget vs. Awaiting in Async/Await: Was ist der Unterschied und wann sollten Sie beide verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage