• 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就没有任何作用了。

  • 相关阅读:
    openGL
    shader
    安卓2
    安卓
    错误整理
    3D图形学
    shaderlab
    MVC
    一、TCP扫描技术
    端口扫描技术
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/11909436.html
Copyright © 2020-2023  润新知