Maison >développement back-end >C++ >Comment gérer correctement les méthodes asynchrones Fire-and-Forget dans ASP.NET MVC ?

Comment gérer correctement les méthodes asynchrones Fire-and-Forget dans ASP.NET MVC ?

DDD
DDDoriginal
2025-01-12 19:26:43401parcourir

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

Gestion des opérations asynchrones Fire-and-Forget dans les contrôleurs ASP.NET MVC

Les méthodes asynchrones "tirer et oublier", telles que DeleteFooAsync, sont fréquemment rencontrées dans la programmation asynchrone. Bien que le conseil conventionnel soit d'éviter async/await dans ces scénarios, cela peut s'avérer peu pratique lorsqu'un homologue synchrone n'est pas disponible.

Gérer simplement les exceptions non observées à l'aide de TaskScheduler.UnobservedTaskException n'est pas fiable, car des problèmes de contexte de synchronisation peuvent survenir.

Encapsuler la méthode asynchrone dans un bloc try-catch, comme indiqué ci-dessous, résout les exceptions mais s'avère fastidieux pour de nombreuses méthodes :

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

La solution la plus robuste pour les appels déclenchés et oubliés au sein d'un contrôleur ASP.NET MVC utilise Task.Run :

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

Cela décharge l'opération asynchrone vers un thread séparé, l'empêchant de bloquer la réponse et garantissant une exécution fiable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn