【问题标题】:Unobserved task exceptions in .NET4.NET4 中未观察到的任务异常
【发布时间】:2013-11-26 10:35:47
【问题描述】:

根据一些文章和博客,如下代码应该会导致 .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:通过等待任务或访问其异常属性未观察到任务的异常。结果,未观察到的异常被终结器线程重新抛出。 ---> System.InvalidOperationException: 由于对象的当前状态,操作无效。

但事实并非如此。 我 PC 上的 .NET 4 应用程序的行为类似于 .NET 4.5:

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

看起来 .NET 4 已被修补以获得与 .NET 4.5 相同的行为。是真的还是我的配置有问题? 或者如果安装了 4.5,任何 .NET4 应用程序(不针对 4.5)都会以这种方式运行? 提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。也许在这里值得一提(会很棒):msmvps.com/blogs/jon_skeet/archive/2011/06/22/…
    • 是否可以在安装了 4.5 的机器上运行 v4.0(用于测试目的)?
    • @TDenis:我不知道有任何方法可以这样做,不。我会看到有关编辑 Eduasync 条目的信息……我通常不会回去编辑超过两年的博客文章,但我们会看到……
    • 有趣的是,Silverlight 的行为也像 v4.5(并且它没有 app.config 来重新配置行为)。
    • @TDenis:一般来说是 Silverlight,还是安装了 4.5 的机器上的 Silverlight?我不知道他们之间分享了多少。
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2012-02-29
    • 2017-07-27
    相关资源
    最近更新 更多