Betrachten Sie das folgende Codebeispiel:
private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); } private async Task MyAsyncMethod() { //Code before await await MyOtherAsyncMethod(); //Code after await }
In diesem Beispiel, wenn das Schlüsselwort „await“ verwendet wird in MyAsyncMethod() auftritt, kehrt die Steuerung zu MyMethod() zurück. Der Thread ist jedoch aufgrund von task.Wait() nicht gesperrt. Stattdessen wird die Fortsetzung (der Code, der auf „await“ folgt) in einem anderen Thread ausgeführt.
Der Wait-Operator verwendet einen Synchronisationskontext, der bestimmt, wie die Fortsetzung ausgeführt werden soll. Wenn der Aufrufer standardmäßig in einem UI-Thread ausgeführt wird, wird die Fortsetzung auch im UI-Thread ausgeführt. Dies ermöglicht eine nahtlose Integration mit UI-Vorgängen.
Wenn der Aufrufer jedoch in einem Thread-Pool-Thread ausgeführt wird, kann die Fortsetzung in einem anderen Thread-Pool-Thread ausgeführt werden. Dies liegt daran, dass Thread-Pool-Threads nicht für bestimmte Aufgaben vorgesehen sind und für mehrere Vorgänge gleichzeitig verwendet werden können.
Es ist wichtig zu beachten, dass das Verhalten des Wait-Operators mithilfe der Methode „ConfigureAwait“ geändert werden kann. Mit dieser Methode können Sie angeben, ob die Fortsetzung auf demselben oder einem anderen Thread ausgeführt werden soll.
Wenn Sie beispielsweise nicht möchten, dass die Fortsetzung auf demselben Thread, sondern stattdessen auf einem Thread-Pool-Thread ausgeführt wird:
await task.ConfigureAwait(false);
Wenn Sie verstehen, wie Synchronisierungskontexte funktionieren, können Sie die Thread-Ausführung in asynchronem Code effektiv verwalten und potenzielle Sperrprobleme verhindern.
Das obige ist der detaillierte Inhalt vonWas passiert mit der Thread-Ausführung nach einem „await'-Schlüsselwort in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!