Frage:
Wie geht das in einer Single-Threaded-Konsolenanwendung? Kann Code nach dem Schlüsselwort „await“ ausgeführt werden, da der Thread durch task.Wait() gesperrt ist? Übernimmt ein neuer Thread oder verlässt der Hauptthread irgendwie task.Wait(), um den Befehl auszuführen?
Antwort:
Ausführungsmechanismus :
Wenn das Schlüsselwort „await“ in einer asynchronen Methode wie angetroffen wird MyAsyncMethod() wird der verbleibende Code in der Methode als Fortsetzung betrachtet. Das Schlüsselwort „await“ unterbricht effektiv die Ausführung der Methode, bis die ausstehende Aufgabe (z. B. MyOtherAsyncMethod()) abgeschlossen ist.
Thread-Fortsetzung:
Standardmäßig ist die Fortsetzung von Eine asynchrone Methode wird im selben Synchronisationskontext ausgeführt wie der Code vor dem Schlüsselwort „await“. Im Fall einer UI-Anwendung bedeutet dies, dass der Code nach dem Warten im Haupt-UI-Thread ausgeführt wird.
Szenario in einer Single-Threaded-App:
In Bei einer Single-Threaded-Konsolenanwendung blockiert der Aufruf von task.Wait() jedoch die Ausführung des Hauptthreads. Daher kann der Fortsetzungscode nach dem Warten nicht ausgeführt werden, da der Thread effektiv gesperrt ist.
Lösung:
Damit der Fortsetzungscode in einer Single-Thread-Anwendung ausgeführt werden kann, Sie haben zwei Möglichkeiten:
Das obige ist der detaillierte Inhalt vonWie wird die Codeausführung nach „Warten' in einer Single-Thread-Anwendung fortgesetzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!