特殊的Exception ThreadAbortException

控制一个线程的执行状态一般有两种方法:

  1.定义一个执行状态或者一个执行ID;

  2.ThreadAbort

个人比较习惯用第一种,这样可以保证退出时线程是执行完毕的,能保证业务的完整,几乎不用ThreadAbort。

今天改公司的调度器需要用到ThreadAbort,要在Abort之后能通知到被调度者,因此打算是在ThreadAbortException异常中通知。但实现一大半之后才发现,要是被调度者自行catch了ThreadAbortException我就拿不到了,这样我的Abort处理流程是无法触发的,因为时间紧,所以先完成了这个不完美的实现。

为了测试问题,我也实现了一个自行catch ThreadAbortException,结果我惊奇的发现,不管有没有自行catch ThreadAbortException,外层总是能收到ThreadAbortException。

查了查MSDN,才发现ThreadAbortException是一个特殊处理的Exception,会在catch块的结尾处将自动被再次引发。不知道MS是不是为了解决这样的问题而引入这个机制。

 

附上MSDN连接:

http://msdn.microsoft.com/zh-cn/library/system.threading.threadabortexception.aspx

posted @   二杠  阅读(390)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示