Maison > développement back-end > C++ > Comment puis-je détecter les exceptions des méthodes Async Void en C# ?

Comment puis-je détecter les exceptions des méthodes Async Void en C# ?

DDD
Libérer: 2025-01-24 02:45:12
original
899 Les gens l'ont consulté

How Can I Catch Exceptions from Async Void Methods in C#?

Gestion des exceptions dans les méthodes void asynchrones

Dans le CTP .NET Async de Microsoft, les méthodes asynchrones se comportent différemment lors du lancement d'exceptions. Dans une méthode Task asynchrone ou une méthode Task asynchrone, les exceptions sont interceptées et attachées à l'objet Task. Cependant, pour les méthodes void asynchrones, il n’existe aucun objet Task pour gérer les exceptions.

Attraper l'exception

Pour intercepter une exception levée par une méthode void asynchrone, vous devez explicitement attendre l'appel de la méthode ou utiliser la méthode Wait() :

  1. En attente d'appel de méthode :

    <code class="language-csharp"> public async Task Foo()
     {
         var x = await DoSomethingAsync();
     }
    
     public async void DoFoo()
     {
         try
         {
             await Foo();
         }
         catch (ProtocolException ex)
         {
             // 由于在异步方法中等待了调用,因此将捕获异常。
         }
     }</code>
    Copier après la connexion
  2. Utiliser la méthode Wait() :

    <code class="language-csharp"> public void DoFoo()
     {
         try
         {
             Foo().Wait();
         }
         catch (ProtocolException ex)
         {
             // 由于等待了调用的完成,因此将捕获异常。
         }
     }</code>
    Copier après la connexion

Sémantique de gestion des erreurs

Comme Stephen Cleary l'a souligné, les méthodes void asynchrones ont une sémantique de gestion des erreurs différente :

"Lorsqu'une méthode void asynchrone lève une exception, l'exception est déclenchée directement sur le SynchronizationContext qui était actif lorsque la méthode void asynchrone a été démarrée

."

Autres consignes

  • Si .NET exécute la méthode de manière synchrone, l'utilisation de Wait() peut provoquer le blocage de l'application.
  • Voir l'explication ci-dessous pour plus de détails sur la façon dont le compilateur gère ce comportement : https://www.php.cn/link/c4d856156b2c629314b9edd13523fe8e

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal