C# 未处理的异常会中断应用程序吗?

C# 未处理的异常会中断应用程序吗?,c#,exception,asynchronous,task-parallel-library,task,C#,Exception,Asynchronous,Task Parallel Library,Task,在.NET4.0中,任务中未经处理的异常会使应用程序在最终确定时中断。(也有人说在.NET4.5中,MS编辑了异常规则,即不会抛出未处理的异常) 但我尝试了下面的代码,以查看应用程序。(在.net4.0中),但它似乎很强大 static void Main(string[] args) { for (int i = 0; i < 100; i++) { var t = Task.Factory.StartNew<int>(() => {

在.NET4.0中,任务中未经处理的异常会使应用程序在最终确定时中断。(也有人说在.NET4.5中,MS编辑了异常规则,即不会抛出未处理的异常)

但我尝试了下面的代码,以查看应用程序。(在.net4.0中),但它似乎很强大

static void Main(string[] args)
{

    for (int i = 0; i < 100; i++)
    {
        var t = Task.Factory.StartNew<int>(() => { throw new Exception("xxxxxx"); return 1; }
            , CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
    }

    while (true)
    {
        GC.Collect();
        Thread.Sleep(1000);
    }
    Console.ReadKey();
}
static void Main(字符串[]args)
{
对于(int i=0;i<100;i++)
{
var t=Task.Factory.StartNew(()=>{抛出新异常(“xxxxxx”);返回1;}
,CancellationToken.None,TaskCreationOptions.None,TaskScheduler.Default);
}
while(true)
{
GC.Collect();
睡眠(1000);
}
Console.ReadKey();
}
代码运行GC.Collect()以完成任务对象,但应用程序正常。它没有坏


为什么?

如果您的计算机上安装了.net 4.5,那么也会对.net 4.0进行就地修改,这可能就是您看到的行为的原因

如果仍希望抛出未观察到的异常,可以将以下部分添加到配置文件中:



您确定要在.NET 4.0上运行它,还是刚刚编译了targeting 4.0?我的目标框架.NET framework 4。并使用
clrver
。计算机上安装的版本:v1.1.4322 v2.0.50727 v4.0.30319尝试添加
TaskScheduler.UnobservedTaskeException
处理程序,并查看是否调用它。TaskScheduler.UnobservedTaskeException将处理异常,它证明GC回收任务对象。