【发布时间】:2011-07-24 15:07:47
【问题描述】:
我在这里遇到了一个奇怪的问题。我正在使用 Mono 的 Red Hat Enterprise Linux 上运行以下 C# 代码。我看到的是 Thread.Sleep(Timeout.Infinite);有时根本睡不着。我期望的是线程在睡眠时阻塞,其他一些线程在睡眠线程上执行中断()并且“异常被捕获!”行被打印出来。
我看到的是“Pre”和“Post”被打印出来。 (顺便说一句,我正在维护别人的代码,我不会使用 sleeps 但我现在不得不忍受它)。
我在网上查看并试图查看是否存在 Thread.Sleep 无法睡眠但找不到任何东西的情况。任何提示都表示赞赏。
mj
try{
Console.WriteLine("Pre");
Thread.Sleep( Timeout.Infinite );
Console.WriteLine("Post");
} catch( ThreadInterruptedException e )
{
Console.WriteLine( "Exception caught!" );
}
【问题讨论】:
-
如果将其更改为非无限的非常大的数字会怎样?
int.MaxValue已经超过 24 天了,改用它可以吗?此外,您提到它“有时”根本不睡觉。它的发生频率如何?您是否注意到它的发生规律? -
我尝试将其设置为 int.MaxValue 并且遇到了同样的问题。发生的情况是它会运行六次就好了(它在一个循环中),然后当它中断时它就会变得疯狂,我会看到大量的日志。
-
如果将其设置为中等长度(比如一个小时左右)会发生什么?