重置中止有什么作用
本文关键字:什么 作用 | 更新日期: 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
返回。
重置中止取消线程的中止请求