线程(任务)中的异常不会像示例建议的那样传播

Exception in thread (Task) is not propagated like example suggests

示例代码来自 "C# 7.0 in a nutshell",第 580 页:

        Task task = Task.Run(() => { throw null; });
        try
        { 
            task.Wait(); 
        }
        catch (Exception ex)
        { }

在我的 VS2017 中执行,与书中描述的方式不符。 运行 从 IDE 内部,System.NullReferenceException 在第一行立即抛出(并停止执行),而该示例表明异常在启动线程内抛出并在那里等待直到有人在 Task 对象上调用 Wait() 或读取 Result。在第 277 页上,Task class 被简要解释,并且对 线程池 的提及非常不清楚,其中 可以 使用。我想在我的例子中它没有被使用,而是主线程正在执行 lambda,因此生成了一个未捕获的异常。我找不到有关如何或在何处配置线程池或 Task class 行为的提示。还是我错过了完全不同的东西?

您可能看到调试器在 抛出异常:

时中断

这里的赠品是对话框显示 "Exception Thrown",并且 throw 语句以黄色突出显示。

默认情况下,当代码中的任何异常被抛出时,调试器将中断,而不管它后来是否被捕获(或者,如果您禁用了“仅我的代码”,当任何地方抛出任何异常时)。

您可以通过单击对话框中的 "Open Exception Settings" link 或转到调试 -> Windows -> 异常设置并取消选中 "Common Language Runtime Exceptions" 来更改此设置。

您还可以准确控制调试器将中断哪些异常。在 "Exception Thrown" 对话框中,您还可以取消勾选 "Break when this exception type is thrown" 复选框以阻止调试器在将来中断该异常类型。

当您意识到要 re-enable 打破默认的异常集时,异常设置顶部有一个方便的重置按钮: