4 votes

Meilleure pratique pour gérer les exceptions dans l'appel asynchrone

Par exemple, j'utilise wenclient.DownloadfileAsync pour télécharger un fichier de manière asynchrone.

Dans le gestionnaire d'événement DownloadFileCompleted, je peux vérifier si j'ai une exception ou non en utilisant la propriété AsyncCompletedEventArgs.Error.

Si je relance cette exception, mon exécutable cesse cependant de s'exécuter immédiatement.

Je me demande comment traiter ce type d'exception ? Comment renvoyer cette exception vers le thread appelant ?

2voto

Jon Skeet Points 692016

Le meilleur moyen sera être d'utiliser le support asynchrone de C# 5 :)

Mais vous pouvez renvoyer l'exception au thread appelant de la même manière que vous transmettez le résultat. Si vous utilisez .NET 4, vous pouvez utiliser la méthode suivante Task<T> pour permettre au fil d'origine d'accéder au résultat réussi ou l'exception. En fait, s'ils essaient d'accéder au résultat réussi et qu'il y a eu un échec, l'exception sera levée automatiquement (enveloppée dans une balise AggregateException ). L'appelant peut également vérifier l'échec de manière explicite.

Si vous n'utilisez pas .NET 4, vous pouvez bien sûr simuler tout cela vous-même, en écrivant vos propres types avec les propriétés appropriées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X