Heim > Backend-Entwicklung > C++ > Was passiert mit dem Thread nach einem „await'-Schlüsselwort in der asynchronen C#-Programmierung?

Was passiert mit dem Thread nach einem „await'-Schlüsselwort in der asynchronen C#-Programmierung?

Susan Sarandon
Freigeben: 2025-01-05 16:32:41
Original
854 Leute haben es durchsucht

What Happens to the Thread After an `await` Keyword in C# Async Programming?

Thread-Verhalten nach dem Schlüsselwort „await“ verstehen

Bei der asynchronen Programmierung spielt das Schlüsselwort „await“ eine entscheidende Rolle bei der Verwaltung von Threads und der Gewährleistung einer effizienten Ausführung. Allerdings kann es verwirrend sein, zu verstehen, wie der Code nach der Begegnung mit „await“ weitergeht. Ziel dieses Artikels ist es, dies durch eine detaillierte Untersuchung zu verdeutlichen.

Betrachten Sie den folgenden Codeausschnitt als Beispiel:

private async Task MyAsyncMethod()
{
    // Code before await
    await MyOtherAsyncMethod();
    // Code after await
}

private void MyMethod()
{
    Task task = MyAsyncMethod();
    task.Wait();
}
Nach dem Login kopieren

Wenn das Schlüsselwort „await“ in MyAsyncMethod angetroffen wird, wird die Kontrolle an MyMethod zurückgegeben. Dies liegt daran, dass MyAsyncMethod als asynchron markiert ist. Da dann jedoch task.Wait() aufgerufen wird, wird der Thread, der MyMethod ausführt, blockiert, was scheinbar die Ausführung des Codes nach dem Warten verhindert.

Führt ein neuer Thread den Code nach dem Warten aus?

Die Antwort ist: vielleicht. Das Verhalten hängt von der Implementierung des Synchronisierungskontexts ab, der zum Zeitpunkt der Auswertung des Warteausdrucks „aktuell“ ist.

Wenn im bereitgestellten Beispiel der Code in einem UI-Thread ausgeführt wird, wird die Fortsetzung (der Code nach dem Warten) wird im selben UI-Thread ausgeführt. Wenn der Code hingegen auf einem Thread-Pool-Thread ausgeführt wird, kann die Fortsetzung auf jedem verfügbaren Thread-Pool-Thread ausgeführt werden.

Thread-Blockade vermeiden

Wenn das Ziel darin besteht, den Code nach dem Warten sofort auszuführen, ist es wichtig, das Blockieren des Threads mit task.Wait() oder task.Result zu vermeiden. Erwägen Sie stattdessen andere Optionen wie das Registrieren eines Rückrufs oder die Verwendung der Warteaufgabe selbst.

Thread-Affinität steuern

Für Szenarien, in denen eine bestimmte Thread-Affinität für die Fortsetzung erforderlich ist, wird die Die Methode „ConfigureAwait“ kann verwendet werden. Durch die Übergabe von „false“ an „ConfigureAwait“ kann die Fortsetzung explizit angewiesen werden, in einem anderen Thread-Kontext ausgeführt zu werden.

Zusätzliche Ressourcen

Um Ihr Verständnis des Thread-Verhaltens mit „await“ zu vertiefen, Weitere Informationen finden Sie in den folgenden Ressourcen:

  • MSDN-Dokumentation: https://docs.microsoft.com/en-us/dotnet/csharp/async/
  • C# in Depth, 3. Auflage: https://www.manning.com/books/csharp-in- Depth -Dritte Auflage
  • Tekpub-Screencast-Serie: https://www.tekpub.com/category/257-asynchronous-programming-in-c-sharp

Das obige ist der detaillierte Inhalt vonWas passiert mit dem Thread nach einem „await'-Schlüsselwort in der asynchronen C#-Programmierung?. 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