C# 调试后台任务中的异常

C# 调试后台任务中的异常,c#,visual-studio,C#,Visual Studio,我有一个抛出错误的后台任务(对象引用未设置为对象的实例)。我希望调试器在异常发生时停止,但它没有停止。我已经启用了所有“公共语言运行时异常”。我很确定这与async/await的使用有关 下面的代码复制了该行为。程序的输出与预期一致: 你好 错误:xxx class Program { public static void Main(string[] args) { new Test().TestMethod(); Console.WriteLin

我有一个抛出错误的后台任务(对象引用未设置为对象的实例)。我希望调试器在异常发生时停止,但它没有停止。我已经启用了所有“公共语言运行时异常”。我很确定这与async/await的使用有关

下面的代码复制了该行为。程序的输出与预期一致: 你好 错误:xxx

class Program
{
    public static void Main(string[] args)
    {
        new Test().TestMethod();
        Console.WriteLine("Hello!");
        Console.ReadLine();
    }
}

public class Test
{
    public async void TestMethod()
    {
        try
        {
            await Task.Run(() =>
            {
                throw new Exception("xxx"); // Debugger should stop the execution here
            });
        }
        catch (Exception e)
        {
            Console.WriteLine($"Error: {e.Message}");
        }
    }
}

仔细检查您的异常设置,当正在抛出的特定异常类型未经处理时,您可能没有将Visual Studio设置为中断:


Hm.我以为VS会在所有例外情况下停止。实际上,当我在主程序中插入抛出相同的异常时(例如,在Console.WriteLine之前),它确实会这样做。另一方面,当我引发一个除法为零时,调试器实际上会在后台任务中停止。是的,它们提供了这些设置,以便您可以选择忽略调试时可能出现的某些异常。实际上,我认为应该是,但事实并非如此。所以我仍然不知道如何让调试器在异常点停止。它们是什么类型的实际异常被抛出,它是否包装了任何其他异常?