我可以在Task.Run崩溃程序中发生异常吗?

Rom*_*kov 5 .net .net-4.5

我不是悄悄吞噬异常的忠实粉丝,但是下面的代码确实如此:

Task.Run(() =>
{
    var obj = DoSomethingCpuIntensive(); // returns null, due to a bug
    obj.DoMoreStuff();
    Console.WriteLine("after"); // never get here; program continues running
});
Run Code Online (Sandbox Code Playgroud)

我已经阅读了ThrowUnobservedTaskExceptions配置值,但这没有用,因为我从不对Task返回做任何事情(编辑:实际上它确实有帮助,但只在Release版本中).

有没有办法让这个未处理的异常崩溃程序?我是否Task.Run以某种方式使用我不应该这样做?

Rom*_*kov 1

看来Task.Run这样使用确实是一个错误。我想我应该await这样做,否则就会发生像上面这样的愚蠢的事情。

当它确实因 而崩溃时await,调试器毫无帮助,如下所示:

                在此输入图像描述

我认为这一切都意味着我在这里确实做错了事Task.Run

一个简单的修复方法是使用旧的ThreadPool.QueueUserWorkItem

                  在此输入图像描述

这样好多了!无论如何,我在这段代码中实际上并不需要 async/await ;我只是使用它,Task.Run因为它打字较少。