异步方法异常崩溃应用程序

时间:2018-01-19 15:41:59

标签: c# asynchronous async-await

我正在使用第三方DLL,它提供执行操作的异步方法。

我在try-catch块中运行它,但是 - 禁用了JustMyCode - 我从第三方对象中的某个地方得到一个错误,该错误只能在AppDomain.CurrentDomain.UnhandledException中处理,这会关闭应用程序并且远远超出被概括为处理这个问题的地方。

代码:

try { ResultObject result = await thirdPartyObject.MethodAsync(); }
catch { /* never get here */ }

反射中的thirdPartyObject.MethodAsync()的签名:

public Task<ResultObject> MethodAsync();

在遇到内部错误(仅在VS设置中禁用“Just My Code”后可见)后,它进入System.Threading.Tasks.TaskCanceledException:'任务被取消。'  ......

有没有办法拦截任务取消而不会遇到全局未处理的异常处理程序?

1 个答案:

答案 0 :(得分:3)

  

有没有办法拦截任务取消而不会遇到全局未处理的异常处理程序?

并非没有在第三方代码中捕获异常。例如,如果第三方方法启动了一个新线程,或者它没有等待的新Task,并且在这个后台线程上抛出异常,那么它将不会被{{1}捕获。子句代码。

有关更多信息和一些示例,请参阅@Peter Torr的博文:https://blogs.msdn.microsoft.com/ptorr/2014/12/10/async-exceptions-in-c/

您应该要求程序集的制造商修改其代码。