技术:.NET, 关于 ThreadAbortException

翟二喜

经过一系列对.NET Thread 的测试,有下列结论:

1. 正常情况的 ThreadAbortException 异常:

在主程序中 theThread.Abort() 后将引发线程中的 ThreadAbortException 异常。

根据 MSDN 对 ThreadAbortException 的描述,“ThreadAbortException 是一种可捕获的特殊异常”,在 catch 块的结尾处,既便不使用 throw 它仍将继续引发,这样可能经过所有上级 catch ,直至遇到 Thread.ResetAbort();

Thread.ResetAbort(); 取消为当前线程请求的 Abort(); 执行后 ThreadAbortException 不再继续引发。如果主程序再次调用 theThread.Abort(); ThreadAbortException 异常将再次引发。

2. Abort() 尚未 ResetAbort() 再次 Abort():

第二次 Abort() 不起作用。除非在第二次调用 Abort 前,已经执行了 ResetAbort();

3. 线程正进行于其它 finally 、catch 块中时:

线程将在处理 finally、catch 块之后引发 ThreadAbortException 异常。

4. 线程中在进行 Thread.Sleep(n); 时在线程外 Abort() 将会立即引发 ThreadAbortException 异常。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: