Heim >Backend-Entwicklung >C++ >Wie kann ich eine asynchrone Methode in C# synchron aufrufen?
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:
.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..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!