Heim > Backend-Entwicklung > C++ > Wie gehe ich mit Fire-and-Forget-Async-Methoden in ASP.NET MVC richtig um?

Wie gehe ich mit Fire-and-Forget-Async-Methoden in ASP.NET MVC richtig um?

DDD
Freigeben: 2025-01-12 19:26:43
Original
398 Leute haben es durchsucht

How to Properly Handle Fire-and-Forget Async Methods in ASP.NET MVC?

Verwalten asynchroner Fire-and-Forget-Vorgänge in ASP.NET MVC-Controllern

Asynchrone „Fire-and-Forget“-Methoden wie DeleteFooAsync kommen in der asynchronen Programmierung häufig vor. Während der herkömmliche Rat darin besteht, async/await in diesen Szenarien zu vermeiden, kann dies unpraktisch sein, wenn kein synchrones Gegenstück verfügbar ist.

Die einfache Behandlung unbeobachteter Ausnahmen mit TaskScheduler.UnobservedTaskException ist unzuverlässig, da es zu Problemen mit dem Synchronisierungskontext kommen kann.

Das Einschließen der asynchronen Methode in einen Try-Catch-Block, wie unten gezeigt, behebt Ausnahmen, erweist sich jedoch für zahlreiche Methoden als umständlich:

<code class="language-csharp">private async void DeleteFooWrapperAsync()
{
    try
    {
        await DeleteFooAsync();
    }
    catch (Exception exception)
    {
        m_log.Error("DeleteFooAsync failed: " + exception.ToString());
    }
}</code>
Nach dem Login kopieren

Die robusteste Lösung für Fire-and-Forget-Aufrufe innerhalb eines ASP.NET MVC-Controllers ist die Verwendung von Task.Run:

<code class="language-csharp">Task foo = Task.Run(() => DeleteFooAsync());</code>
Nach dem Login kopieren

Dadurch wird der asynchrone Vorgang auf einen separaten Thread verlagert, wodurch verhindert wird, dass er die Antwort blockiert, und eine zuverlässige Ausführung gewährleistet wird.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Fire-and-Forget-Async-Methoden in ASP.NET MVC richtig um?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage