如..所示here https://stackoverflow.com/questions/18084983/debugger-not-breaking-stopping-for-exceptions-in-async-method and here https://stackoverflow.com/questions/16328087/tpl-break-on-unhandled-exceptions,异步任务中发生的异常在技术上不会被未处理。
当使用 MVC 时,这尤其令人讨厌。实际上我们花了一段时间才弄清楚为什么越来越多的异常没有被捕获,过去几周我们一直在逐渐向我们的应用程序引入 Web API 调用。
public async Task<ActionResult> Foo()
{
// ...
}
建议的解决方法是让 VS 在所有异常上中断,而不仅仅是未处理的异常。它可以工作,但有一个恼人的“副作用”,它确实会在所有异常情况下中断:)
是否有另一种不涉及中断所有异常的解决方法?它可以特定于 MVC,但不一定是(意味着它是恰好适用于 MVC 的通用解决方案)。
A) 包装您的调用并在任务代码中抛出自定义异常。仅在抛出自定义异常时中断。您可以选择第一次抛出的异常。
B)。如果您有任何等待代码,则 Debug.Assert() 您的任务结果。也就是说,不仅仅是解雇和忘记。如果您在某处等待任务或将错误处理保留在延续中,则任务会在属性中返回异常。
伪代码
即任务。 continuewith(r => if(!r.Exception 为 null) Debug.Break()))
ETC。
希望能帮助您走上正确的道路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)