2010-11-11 6 views
4

Par exemple, j'utilise wenclient.DownloadfileAsync pour télécharger un fichier de manière asynchrone.Meilleure pratique pour gérer l'exception dans l'appel asynchrone

Dans le gestionnaire d'événements 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 fichier exécutable s'arrête immédiatement. Je me demande comment gérer ce genre d'exécutions? Comment renvoyer cette exception au thread appelant ?

Répondre

2

La meilleure façon sera d'utiliser C# 5 soutien de async :)

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

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

+0

J'utilise C# 3, un exemple concret que vous pouvez partager pour transmettre le résultat et l'exception au thread appelant? – user496949

+0

Attendez une minute, il y a C# 5? Je pensais que nous serions à 4? – Bobby

+0

@Bobby: Nous en sommes à 4, mais la caractéristique principale de 5 a été annoncée à PDC. –

Questions connexes