c# - 线程(任务)中的异常不会像示例所暗示的那样传播
问题描述
“C# 7.0 in a nutshell”中的示例代码,第 580 页:
Task task = Task.Run(() => { throw null; });
try
{
task.Wait();
}
catch (Exception ex)
{ }
在我的 VS2017 中执行,并没有按照书中描述的方式工作。从 IDE 内部运行,System.NullReferenceException
在第一行立即抛出(并停止执行),而该示例表明异常在启动的线程内抛出并在那里等待,直到有人调用或Wait()
读取对象。在 p.277上简要解释了该类,并且非常不清楚地提到了可以使用的线程池。我猜在我的情况下它没有被使用,而是主线程正在执行 lambda,因此会生成一个未捕获的异常。我找不到有关如何或在何处配置线程池或Result
Task
Task
Task
班级。还是我错过了一些完全不同的东西?
解决方案
您很可能在抛出异常时看到调试器中断:
这里的赠品是对话框显示“抛出异常”,并且该throw
语句以黄色突出显示。
默认情况下,当您的代码中的任何异常被抛出时,调试器将中断,无论它后来是否被捕获(或者,如果您禁用了“仅我的代码”,则在任何地方抛出任何异常时)。
您可以通过单击对话框中的“打开异常设置”链接或转到“调试”->“Windows”->“异常设置”并取消选中“通用语言运行时异常”来更改此设置。
您还可以准确控制调试器将中断哪些异常。在“抛出异常”对话框中,您还可以取消选中“抛出此异常类型时中断”复选框,以停止调试器将来在该异常类型上中断。
当您意识到要重新启用默认异常集的中断时,异常设置顶部有一个方便的重置按钮:
推荐阅读
- c++ - 如何将数组的地址分配给指针?
- python-3.x - 使用 panda python 的样本数 -5 必须为非负数
- selenium - 使用 Selenium Grid 进行数据驱动测试
- macos - 无法通过 macOS 中的 ansible unarchive 模块提取 tar 文件?
- xpath - 如何为以下代码编写 XML 路径表达式?
- image - Ionic Framework 的光学字符识别插件
- angular - Angular Material 固定侧栏标题不是固定的
- c++ - C ++ 2d数组用文件中的最后一个元素值填充所有元素
- node.js - 想用 Nodejs 每 N 秒发出一次“X Post”请求(我正在使用 facebook 聊天机器人,所以我想每秒发出 250 个 Post 请求)
- reactjs - 为什么即使更新了商店,redux mapStateToProps 也不更新组件道具?