Heim >Backend-Entwicklung >C++ >Wie wird die Codeausführung nach einem „await'-Schlüsselwort in C# fortgesetzt?

Wie wird die Codeausführung nach einem „await'-Schlüsselwort in C# fortgesetzt?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 08:30:11901Durchsuche

How Does Code Execution Resume After an `await` Keyword in C#?

Codeausführung nach dem Schlüsselwort „await“ verstehen

In einer Single-Threaded-Anwendung kann das Schlüsselwort „await“ verwirrend sein. Wenn der Code innerhalb einer asynchronen Methode auf das Schlüsselwort „await“ stößt, übergibt er sich an die aufrufende Methode und gibt die Kontrolle an den UI-Thread ab. Allerdings kann es schwierig sein zu verstehen, wie der Code nach dem Warten ausgeführt wird.

Entgegen der Annahme, dass der Hauptthread gesperrt bleibt, kann der Code nach dem Warten von einem anderen Thread ausgeführt werden. Dieses Verhalten wird durch den Synchronisationskontext bestimmt. Standardmäßig verwendet das Wartemuster für Task den Synchronisierungskontext, der zum Zeitpunkt des Warteausdrucks aktuell war.

Wenn der Code beispielsweise innerhalb des UI-Threads ausgeführt wird, wird die Fortsetzung (der Teil, der auf das Warten folgt) ausgeführt Setzen Sie die Ausführung im selben UI-Thread fort. Im Fall von Thread-Pool-Threads wird die Fortsetzung jedoch möglicherweise nicht unbedingt im selben Thread fortgesetzt.

Es ist wichtig zu erkennen, dass das Blockieren des UI-Threads wie beim Wait()-Aufruf im bereitgestellten Code erfolgt Beispiel kann die Ausführung der Fortsetzung verhindern. In Szenarien, in denen Aufgaben Arbeiten am aktuellen Thread umfassen und ihr Abschlussstatus unbekannt ist, ist der Rückgriff auf Wait() oder Result nicht ratsam.

Um zu vermeiden, dass Sie sich auf den Standardsynchronisierungskontext verlassen, verwenden Sie die Methode Task.ConfigureAwait verwendet werden kann. Auf diese Weise können Sie angeben, dass die Fortsetzung in jedem Thread ausgeführt werden kann, wodurch sie für Bibliotheksmethoden geeignet ist, die keine Thread-Präferenz haben. Durch die Nutzung der Syntax „ConfigureAwait(false)“ signalisieren Sie den Wunsch, die Fortsetzung vom aktuellen Kontext zu lösen und so robusteren Multithread-Code zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWie wird die Codeausführung nach einem „await'-Schlüsselwort in C# fortgesetzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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