Heim >Backend-Entwicklung >C++ >Wie kann ich asynchron C# -Methoden synchron aufrufen?

Wie kann ich asynchron C# -Methoden synchron aufrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-02-02 13:01:09460Durchsuche

How Can I Call Asynchronous C# Methods Synchronously?

synchron ausführen asynchroner C# Methoden

asynchrone Methoden, die typischerweise als public async Task Foo() deklariert sind, sind für gleichzeitige Operationen und verbesserte Benutzererfahrungen von entscheidender Bedeutung. Die Integration in vorhandene synchrone Codebasen erfordert jedoch eine sorgfältige Berücksichtigung. Untersuchen wir mehrere Ansätze.

Methode 1: Task.WaitAndUnwrapException

für einfache asynchrone Methoden, die nicht auf der Kontextsynchronisation beruhen (z. B. diejenigen, die ConfigureAwait(false)), bietet Task.WaitAndUnwrapException eine einfache Lösung:

<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>

Dies behandelt Ausnahmen ohne die zusätzliche Schicht von AggregateException. Diese Methode ist jedoch unangemessen, wenn MyAsyncMethod eine Kontextsynchronisation erfordert.

Methode 2: AsyncContext.RunTask

Wenn die Kontextsynchronisation essentiell ist, liefert AsyncContext.RunTask einen verschachtelten Kontext:

<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>

Dies verhindert effektiv Deadlocks, die durch das Blockieren von Waiten auf Aufgaben entstehen könnten, die nicht ConfigureAwait(false).

verwenden

Methode 3: Task.Run

Wenn AsyncContext.RunTask ungeeignet ist (z. B. wenn asynchrone Methoden auf UI -Ereignisse warten), laden Sie die asynchrone Methode in den Thread -Pool aus:

<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>

Dieser Ansatz verlangt, dass MyAsyncMethod thread-sicher ist und nicht von UI-Elementen oder dem ASP.NET-Anforderungskontext abhängt. Alternativ liefert die Verwendung ConfigureAwait(false) mit Methode 1 eine praktikable Alternative.

Weiteres Lesen

Für ein tieferes Verständnis konsultieren Sie Stephen Clearys eindeutige MSDN -Artikel "Async Programming - Brownfield Async Development".

Das obige ist der detaillierte Inhalt vonWie kann ich asynchron C# -Methoden 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