Maison > développement back-end > C++ > Comment gérer les exceptions levées par les méthodes Async Void en C# ?

Comment gérer les exceptions levées par les méthodes Async Void en C# ?

Patricia Arquette
Libérer: 2025-01-24 02:27:09
original
693 Les gens l'ont consulté

How Do I Handle Exceptions Thrown by Async Void Methods in C#?

Gestion des exceptions des méthodes void asynchrones en C#

Lors de l'utilisation du CTP asynchrone de .NET, il est essentiel de comprendre comment les exceptions sont gérées à l'intérieur et à l'extérieur des méthodes asynchrones, en particulier lorsqu'il s'agit de méthodes void asynchrones.

Propagation des exceptions dans les méthodes asynchrones

Dans le code C# fourni, une méthode void asynchrone nommée Foo() est exécutée de manière asynchrone et elle est appelée par la méthode non asynchrone DoFoo(). Dans Foo(), si une exception (telle que ProtocolException) est levée, elle n'est pas automatiquement propagée à DoFoo(). En effet, les méthodes void asynchrones ne renvoient pas d'objet Task pouvant être attendu.

Gérer les exceptions dans la méthode appelante

Pour intercepter une exception levée depuis une méthode void asynchrone dans la méthode appelante, vous devez :

  1. Attendez l'appel dans une méthode asynchrone :

    Modifiez la méthode DoFoo() pour la rendre asynchrone et utilisez wait Foo(). Cela attendra que Foo() se termine et interceptera toutes les exceptions qui pourraient être levées.

  2. Synchronisation en attente de fin :

    Utilisez la méthode Wait() du résultat Foo() dans DoFoo(). Cela bloquera le thread jusqu'à la fin de l'opération asynchrone et lèvera toute exception qui se produit.

Exemple d'utilisation d'attendre :

<code class="language-csharp">public async void DoFoo()
{
    try
    {
        await Foo(); // 因为您已 await,所以会捕获异常
    }
    catch (ProtocolException ex)
    {
        // 处理异常
    }
}</code>
Copier après la connexion

Exemple utilisant Attendre :

<code class="language-csharp">public void DoFoo()
{
    try
    {
        Foo().Wait(); // 因为您已等待,所以会捕获异常
    }
    catch (ProtocolException ex)
    {
        // 处理异常
    }
}</code>
Copier après la connexion

Gardez à l'esprit que l'utilisation de Wait peut entraîner des problèmes de synchronisation potentiels, car elle bloque le thread jusqu'à la fin de l'opération. Il est recommandé d'utiliser d'abord la méthode await pour éviter de bloquer les threads et améliorer la réactivité du programme.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal