未处理的异常会破坏应用程序?

时间:2014-08-18 03:25:48

标签: c# exception asynchronous task-parallel-library task

在.net 4.0中说,任务中未处理的异常将使应用程序在最终确定时被破坏。 (在.net 4.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();
}

代码运行GC.Collect()来完成Task对象,但应用程序没问题。它没有被打破。

为什么呢?

1 个答案:

答案 0 :(得分:1)

如果您的计算机上安装了.net 4.5,则会对.net 4.0进行原位修改,这可能就是您获得所见行为的原因。

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

<configuration>
    <runtime>
      <ThrowUnobservedTaskExceptions enabled="true"/>
    </runtime>
</configuration>

More info about <ThrowUnobservedTaskExceptions>.