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

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

DDD
DDDOriginal
2025-01-19 13:36:09664Durchsuche

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

Asynchrone Methoden synchron ausführen

Asynchrone Programmierung in C# bietet eine effiziente Möglichkeit, lang laufende Vorgänge abzuwickeln, ohne den Hauptanwendungsthread einzufrieren. Es kann jedoch vorkommen, dass Sie eine asynchrone Methode synchron aus einem synchronen Kontext aufrufen müssen.

Die Lösung: Der Einsatz von Task.Run

Um eine synchrone Ausführung einer asynchronen Methode zu erreichen, bietet die Task.Run-Methode eine praktische Lösung. Es verlagert den asynchronen Vorgang auf einen Thread-Pool-Thread, sodass der aufrufende Thread auf den Abschluss warten kann:

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

Warum die direkte Verwendung von .Result vermeiden?

Auch wenn der Zugriff auf die Result-Eigenschaft einer Aufgabe einfach erscheinen mag, birgt er zwei potenzielle Risiken:

  1. Deadlock-Szenarien: Die direkte Verwendung von .Result kann zu Deadlocks führen, wenn der asynchrone Vorgang versucht, auf den Hauptthread zuzugreifen, während dieser bereits blockiert ist und auf das Ergebnis wartet. Task.Run mindert dieses Risiko, indem der asynchrone Vorgang in einem separaten Thread ausgeführt wird.
  2. Ausnahmebehandlung: Die Eigenschaft .Result umschließt Ausnahmen von der asynchronen Methode in einem AggregateException. Durch die Verwendung von .GetAwaiter().GetResult() wird dies vermieden, indem die Ausnahme entpackt wird, was die Fehlerbehandlung vereinfacht.

Zusammenfassung

Die Verwendung von Task.Run in Verbindung mit seinem Awaiter bietet einen zuverlässigen und effizienten Ansatz zum synchronen Aufrufen asynchroner Methoden innerhalb synchronen Codes. Diese Methode vermeidet potenzielle Deadlocks und vereinfacht die Ausnahmeverwaltung.

Das obige ist der detaillierte Inhalt vonWie kann ich eine asynchrone Methode in C# 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