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

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

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

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

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

最佳答案 最好的方法是使用C#5的异步支持:)

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

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

点赞