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

posted @   BruceNeter  阅读(1189)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示
主题色彩