我们想切换到 .net 4.5,因为它提供了许多改进。
但是……有时我会发现一些关于框架中非平凡更改的棘手细节。
让我们以 TPL 未观察到的异常处理为例:
如果您不等待传播异常的任务或访问其 Exception 属性,则在对任务进行垃圾收集时,将根据 .NET 异常策略升级异常。(注意,“例外政策”一词没有链接或说明)
好吧,这似乎是 .Net v.4.0 中的行为
但斯蒂芬图布告诉我们更多:
为了使开发人员更容易编写基于任务的异步代码,.NET 4.5 更改了未观察到的异常的默认异常行为。虽然未观察到的异常仍会导致引发 UnobservedTaskException 事件(不这样做将是一项重大更改),但默认情况下进程不会崩溃。相反,无论事件处理程序是否观察到异常,异常最终都会在事件引发后被吃掉。但是,可以配置此行为。新的 CLR 配置标志可用于恢复到 .NET 4 的崩溃行为。
请注意,此更改并不意味着开发人员应该粗心忽略未处理的异常……它只是意味着运行时比使用时更宽容成为。
这是一个很大的惊喜。考虑到文档中没有更新。
所以,我想知道 .Net v4.5 中发生的其他“无声”变化,
请分享你的知识。
PS 这里的“沉默”一词是指从 Wat 的新文章甚至官方文档中几乎不知道的变化。