【发布时间】:2011-01-23 03:42:47
【问题描述】:
Thread.Abort 可以中断正在休眠的线程(例如,使用 Thread.Sleep(TimeSpan.FromDays(40)) 吗?还是会等到休眠时间跨度到期?
(备注:FromDays(40) 当然是个玩笑。而且我知道 Thread.Abort 不是停止线程的推荐方法,我正在使用我现在不想重构的遗留代码。 )
【问题讨论】:
标签: c# multithreading sleep abort
Thread.Abort 可以中断正在休眠的线程(例如,使用 Thread.Sleep(TimeSpan.FromDays(40)) 吗?还是会等到休眠时间跨度到期?
(备注:FromDays(40) 当然是个玩笑。而且我知道 Thread.Abort 不是停止线程的推荐方法,我正在使用我现在不想重构的遗留代码。 )
【问题讨论】:
标签: c# multithreading sleep abort
您只能从另一个线程中止线程。也就是说,您应该将 Thread 引用存储在某处,然后从其他线程调用 .Abort 。
【讨论】:
Thread.CurrentThread.Abort()
代码值一千字:
public static void Main(string[] args)
{
var sleepy = new Thread(() => Thread.Sleep(20000));
sleepy.Start();
Thread.Sleep(100);
sleepy.Abort();
sleepy.Join();
}
程序在睡眠时间用完之前结束。
【讨论】:
Sleep(TimeSpan.FromDays(40)) 会发生什么?它是否在程序结束之前停止,这是关于的问题
TimeSpan.FromDays(40) 只是说明线程将处于休眠状态。哦,顺便说一下,用TimeSpan.FromDays(40) 调用Thread.Sleep 会导致ArgumentOutOfRangeException。