Heim >Backend-Entwicklung >C++ >Wie kann ich eine asynchrone Methode in C# ohne Deadlocks synchron aufrufen?

Wie kann ich eine asynchrone Methode in C# ohne Deadlocks synchron aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-19 13:52:12372Durchsuche

How Can I Synchronously Call an Asynchronous Method in C# Without Deadlocks?

Asynchrone Methoden synchron aufrufen

Angenommen, es gibt eine asynchrone Methode, sagen wir GenerateCodeAsync(), die eine Aufgabe zurückgibt. Um diese Methode synchron aufzurufen, müssen Sie eine Möglichkeit finden, den synchronen und asynchronen Code zu koordinieren.

Eine Lösung besteht darin, die asynchrone Methode in einem Thread-Pool-Thread auszuführen und den Thread mit awaiter zu blockieren, bis der Vorgang abgeschlossen ist:

<code class="language-csharp">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>

Nachteile der direkten Verwendung von .Result

Der direkte Zugriff auf Result Eigenschaften kann zu Folgendem führen:

  • Deadlock: Ein Aufruf von Result blockiert den Hauptthread und verhindert so die Ausführung von asynchronem Code.
  • AggregateExceptions: Alle von asynchronen Methoden ausgelösten Ausnahmen werden in AggregateException eingeschlossen.

Um diese Probleme zu vermeiden, GetAwaiter().GetResult()Methode:

  • Führen Sie asynchrone Methoden in Thread-Pool-Threads aus, um Deadlocks zu vermeiden.
  • Entpacken Sie alle ausgelösten Ausnahmen, um ohne zusätzliche Blockhandler darauf zuzugreifen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine asynchrone Methode in C# ohne Deadlocks synchron aufrufen?. 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