繁体   English   中英

TPL打破未处理的异常

[英]TPL Break on unhandled exceptions

我在我的应用程序中使用async await以及Task.Factory.StartNew ,但我注意到的一件事是,当未处理的异常发生时,visual studio不再破坏

这是我before using await意思 在此输入图像描述

但在我将一个方法转换为一个Task并使用await之后

在此输入图像描述

它仅在视觉工作室的输出区域中捕获...

顺便说一下:对我来说很奇怪,因为我是.Net4.5的新手,请原谅我,如果没有说明我需要的具体内容,那么我想知道的是

  • 当使用异步等待时,我如何使视觉工作室中断异常

当调试器说“Exception未被用户代码处理”时,这意味着异常已经传播到框架。 由于async Task方法将其异常放在其返回的Task ,因此异常不会传播到框架。 像这样的例外是未被观察到的

如果希望调试器在抛出异常时中断,则使用Debugger - > Exceptions - >选中CLr Exceptions的“Thrown”框。

如果要观察异常, 则从TaskFactory.StartNew更改为Task.Run并在返回的Task上调用Wait 这将通过Main传播异常(包装在AggregateException ),直到框架。

这就是为什么无效返回异步方法是邪恶的。

在第一种情况下,没有捕获异常,调试器正在提醒您这一点。

在第二种情况下,它将在结果任务上。

如果您处理方法中的异常,您将看到类似的行为。

Task.Run只是TaskFactory.StartNew的简化版本: Task.Run vs Task.Factory.StartNew

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM