重置中止有什么作用

本文关键字:什么 作用 | 更新日期: 2023-09-27 17:56:02

嗨,我有以下测试代码:

class Program
{
    static void Main(string[] args)
    {
        Thread t = new Thread(Work);
        t.Start();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        t.Join();
        Console.WriteLine("End");
    }
    static void Work()
    {
        int i = 0;
        while (i<10)
        {
            try
            {
                while(true);
            }
            catch(ThreadAbortException)
            {
                Thread.ResetAbort();
            }
            Console.WriteLine("I will come back!");
            i++;
        }
    }
}

每次,当有中止时,都会执行 Thread.ResetAbort()。我想知道这个重置中止有什么作用。因为当我运行它时,我看到了以下输出:我会回来的!我会回来的!我会回来的!而且我没有看到输出"结束" - 似乎这个程序根本没有结束。你知道为什么吗?谢谢!

重置中止有什么作用

它取消中止线程的请求。如此处所示。因此,在这种情况下,循环将继续,线程应该仍然处于活动状态。

其他人关于ResetAbort的回答是正确的。 "End"不输出的原因是因为t.Join()永远不会返回。 这是因为您的线程只尝试中止 3 次,而您的循环包含 10 次无限循环尝试。 当目标线程完成运行其委托而您的线程未完成时,Join返回。

重置中止取消线程的中止请求