在异步调用中处理异常的最佳实践

时间:2010-11-11 08:41:53

标签: c# .net asp.net

例如,我使用wenclient.DownloadfileAsync异步下载文件。

在DownloadFileCompleted事件处理程序中,我可以使用AsyncCompletedEventArgs.Error属性检查是否有任何异常。

如果我重新抛出此异常,但我的可执行文件会立即停止运行。

我想知道如何处理这种异常?如何将此异常传回给 调用线程?

1 个答案:

答案 0 :(得分:2)

使用C#5的异步支持的最佳方式:)

但是您可以像传递结果一样将异常传递回调用线程。如果您使用的是.NET 4,则可以使用Task<T>来允许原始线程访问成功的结果该异常。实际上,如果他们尝试访问成功的结果并且出现故障,则会自动抛出异常(包含在AggregateException中)。调用者也可以明确地检查失败。

如果您不使用.NET 4,您可以自己模拟所有这些,当然,可以使用适当的属性编写自己的类型。