我在這裏有一個奇怪的問題。我在Mono上運行Red Hat Enterprise Linux上的以下C#代碼。我看到的是Thread.Sleep(Timeout.Infinite);有時根本不會睡覺。我期望的是線程阻塞睡眠,其他線程在睡眠線程上執行一個Interrupt(),並且「Exception caught!」行被打印。System.Threading.Thread.Sleep Mono with Timeout.Infinite
我看到的是「Pre」和「Post」打印。 (順便說一下,我保持別人的代碼,我不會用睡覺,但我現在必須忍受它)。
我在網上看,並試圖看看是否有Thread.Sleep只是不會睡覺但找不到任何東西的情況。任何提示都表示讚賞。
MJ
try{
Console.WriteLine("Pre");
Thread.Sleep(Timeout.Infinite);
Console.WriteLine("Post");
} catch(ThreadInterruptedException e)
{
Console.WriteLine("Exception caught!");
}
如果將其更改爲非無限大數目,會發生什麼情況? 'int.MaxValue'已經超過24天了,是否可以切換到使用它?另外,你提到它'有時'根本不睡覺。它有多頻繁,你是否注意到它發生的任何模式? – 2011-03-28 16:55:21
我試着將它設置爲一個int.MaxValue,我得到了同樣的問題。會發生什麼事,它會運行六次就好了(它是在一個循環中),然後當它打破時它就會變得瘋狂,我會看到大量的日誌。 – 2011-03-28 17:02:47
如果將其設置爲中等長度,例如一個小時左右,會發生什麼情況? – 2011-03-28 17:34:48