Maison >développement back-end >C++ >Comment gérer correctement les méthodes asynchrones Fire-and-Forget dans 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!