在人们建议之前: 除了试图找到一种解决方法之外,我没有将 Thread.sleep 用于任何事情。我正在尝试处理其他人的未来代码,这些代码可能不是 .Sleep() 免费的。我非常清楚同步事物的可怕程度。
我在我的代码块中接受一个线程。我希望能够为这个线程的生命周期设置一个限制。我通常这样做的方法是这样的:
Thread outer = new Thread(() =>
{
externalThread.Start();
externalThread.Join();
});
outer.Start();
outer.Join(lifetime);
if (outer.ThreadState != ThreadState.Stopped)
{
outer.Abort();
}
inner.Join();
从那以后,我发现在睡眠结束之前我显然无法唤醒睡眠线程。更糟糕的是,如果我给它 10 毫秒的生命周期,它仍然会写入控制台:
new Thread(() => { Thread.Sleep(2000); Console.WriteLine("second"); })
虽然我意识到 .Abort() 不是线程执行的硬限制。似乎 2 秒就足够了一个警告,但我想不是......
我试过检查 WaitSleepJoin 状态和 .Interrupt(); 它使线程崩溃,或引发异常(抱歉,不确定是哪个。Windows 告诉我,如果没有调试器正在运行,它就会崩溃,如果它正在运行,它就像没有调用中断一样运行),并且仍然在 2 秒后写入控制台. .Resume() 显然对睡眠线程没有任何作用。
有没有办法唤醒一个线程,而不等待它的睡眠到期?我知道停止不是“立即的”,因此无论如何都可以调用 Console.WriteLine;这是困扰我的 2 秒等待。如果等了10天呢?由于无法控制进来的线程,我无从得知,而且似乎也没有办法阻止这种事情发生……