c# Thread——1.为什么Abort中断线程是不可靠的
Thread.Abort 方法在c#中用作强制中断线程的执行,大多用于线程内部满足某个特定条件而自己调用关闭自身,比如下面的代码在i自增到3的时候就会停止打印。
class Program { static void Main(string[] args) { Thread thread = new Thread(ShowMessage); thread.Start(); Console.Read(); } public static void ShowMessage() { int i = 0; while (true) { if (i == 3) Thread.CurrentThread.Abort(); Console.WriteLine("hello"); Thread.Sleep(1000); i++; } } }
结果如下:
看样子是起作用了,但是原理我们可以看看Abort方法的介绍
看到这里我相信很多小伙伴们都知道了,其实Abort方法就是给目标线程强制注入了一个异常,导致该线程抛出一个ThreadAbortException的的异常,而中断该线程
那么相应的为什么说Abort不安全,其实也能够讲得通了,我们可以在子线程中捕获异常,并且调用恢复线程的方法,则Abort失效。
代码如下所示:
class Program { static void Main(string[] args) { Thread thread = new Thread(ShowMessage); thread.Start(); Console.Read(); } public static void ShowMessage() { int i = 0; while (true) { try { if (i == 3) Thread.CurrentThread.Abort(); } catch (ThreadAbortException ex) { Console.WriteLine("休想停掉我!!!"); Thread.ResetAbort();//恢复线程 } Console.WriteLine("hello"); Thread.Sleep(1000); i++; } } }
看看效果:
此时的Abort就没有任何作用了。