我正在使用第三方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:'任务被取消。' ......
有没有办法拦截任务取消而不会遇到全局未处理的异常处理程序?
答案 0 :(得分:3)
有没有办法拦截任务取消而不会遇到全局未处理的异常处理程序?
并非没有在第三方代码中捕获异常。例如,如果第三方方法启动了一个新线程,或者它没有等待的新Task
,并且在这个后台线程上抛出异常,那么它将不会被{{1}捕获。子句代码。
有关更多信息和一些示例,请参阅@Peter Torr的博文:https://blogs.msdn.microsoft.com/ptorr/2014/12/10/async-exceptions-in-c/
您应该要求程序集的制造商修改其代码。