. net抑制异常的基本原理是什么(可能没有记录)

本文关键字:记录 是什么 异常 net | 更新日期: 2023-09-27 18:14:15

我试图掌握。net标准,当。net异常被抑制、吞噬或未被注意到时,以检测/怀疑/防止/对此类事件保持警惕。

MSDN在线文章"。net Framework 4.5上的定时器类"指出:

在。net Framework 2.0及更早版本中,Timer组件的事件处理程序引发的所有异常运行事件。这种行为可能会在未来的版本中发生变化.NET Framework

嗯,.NET 4.5已经是。net 2.0的未来版本了吗?
虽然这是一个反问句,但我并不太关心文档中提到的具体案例。

我真正关心并想要理解的是:
.NET异常被抑制的标准、原则和基本原理是什么?

更新(回应Eugen Rieck的回答):

所以问题是:哪个线程应该受到一个例外扔在计时器上?

引用MSDN文章"异常处理(任务并行库)":

如果您不等待传播异常的任务,或访问的Exception属性,则根据. net异常策略

(有趣的"。. NET异常策略"我找不到任何地方…)

嗯,我对WPF应用程序感兴趣,据我所知,它是STA,并且有一个主父线程。
我的愿望是,如果任何异常未得到处理,它就会崩溃。

Update2(回应Matt Smith的评论):

是的,我知道。引用<ThrowUnobservedTaskExceptions>元素:

如果未观察到与任务关联的异常,没有Wait操作,没有附加父操作,并且未读取TaskException属性,则考虑任务异常

在。net Framework 4中,默认情况下,如果一个Task具有未观察到的异常被垃圾收集,终结器抛出异常并终止进程。进程的终止由垃圾收集和结束的时间决定。

使开发人员更容易编写基于任务,.NET Framework 4.5更改了此默认行为未被注意的例外。未观察到的异常仍然会导致事件被引发,但默认情况下进程不终止。相反,之后会忽略异常无论事件处理程序是否观察到,都会引发事件例外。

在。net Framework 4.5中,你可以使用元素。配置文件来启用。net Framework 4的抛出行为一个例外。

我只是略过,以避免问题的膨胀,并得到Stephen Toub的"。net 4.5中的任务异常处理"的参考解释

这个问题毕竟是(真的想以这个问题开始)为我确定的:

  • 是否有一个共同的"。. NET异常策略"在MSDN"异常处理(任务并行库)"中提到,将其明确地制定在一个地方?
  • 是。net版本依赖还是独立的?
  • 在哪里配制?

. net抑制异常的基本原理是什么(可能没有记录)

这是该策略的链接(它在。net 2.0中更改),并且从那时起一直保持不变:http://msdn.microsoft.com/en-us/library/ms228965.aspx

很可能这只是一个实现问题:

  • 在线程池线程上运行计时器
  • 计时器本身不属于线程
  • 创建计时器的线程可能不再运行(或存在)

所以问题是:哪个线程应该在计时器滴答时抛出异常?这个问题没有简单的答案,所以简单地抑制异常(即在每个tick周围运行一个隐含的try ... catch)是一种回避这个问题的方法。