.NET4中未观察到的任务异常

时间:2013-11-13 17:23:43

标签: c# .net exception .net-4.0 task-parallel-library

根据一些文章和博客,像下面这样的代码应该导致.NET 4中的例外

static void Main(string[] args)
    {
        Task.Factory.StartNew(() => { throw new Exception(); });
        Thread.Sleep(1000);
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Console.WriteLine("Completed"); 
    }

预期例外:

  

未处理的异常:System.AggregateException:通过等待任务或访问其Exception属性未观察到任务的异常。结果,终结器线程重新抛出了未观察到的异常。 ---> System.InvalidOperationException:由于对象的当前状态,操作无效。

但它没有。 我的PC上的.NET 4应用程序表现得像.NET 4.5:

  • 默认情况下,他们不会抛出该聚合异常
  • 他们在配置文件中检测到以下设置:
  

< ThrowUnobservedTaskExceptions enabled =“true”/>

看起来.NET 4已被修补以获得与.NET 4.5相同的行为。它是真的还是我的配置有些麻烦? 或者,如果安装了4.5,任何.NET4应用程序(不是以4.5为目标)的行为都会如此? 提前谢谢。

1 个答案:

答案 0 :(得分:7)

我的猜测是你实际在.NET 4.5上运行。请记住,.NET 4.5有效地安装在.NET 4的顶层。即使您的应用程序是针对.NET 4,如果用户安装了.NET 4.5,您将获得新的行为。

用户完全有可能真正只安装.NET 4 ...