Thread.sleep代码(-1)

时间:2018-05-10 09:39:41

标签: c# multithreading

有什么用?
 System.Threading.Thread.Sleep(-1)

我希望这会引发异常,因为Thread.Sleep的文档说明了这个

  

timeout的值为负,不等于Timeout.Infinite(以毫秒为单位),或者大于Int32.MaxValue毫秒。

但是,上面的Thread.Sleep(-1)不会抛出异常。当我查看ReferenceSource时,我看到了

[System.Security.SecuritySafeCritical]  // auto-generated
public static void Sleep(int millisecondsTimeout)
{
    SleepInternal(millisecondsTimeout);
    // Ensure we don't return to app code when the pause is underway
    if(AppDomainPauseManager.IsPaused)
        AppDomainPauseManager.ResumeEvent.WaitOneWithoutFAS();
}

public static void Sleep(TimeSpan timeout)
{
    long tm = (long)timeout.TotalMilliseconds;
    if (tm < -1 || tm > (long) Int32.MaxValue)
        throw new  ArgumentOutOfRangeException("timeout",Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));
    Sleep((int)tm);
}

看起来它不会产生负时间跨度,但只有负时间跨度小于-1。

确实

 Thread.Sleep(-2);

确实会崩溃。

那么-1的特殊情况是什么呢? Thread.Sleep(-1)实际上在做什么?

2 个答案:

答案 0 :(得分:10)

Timeout.Infinite == -1。

的值
  

Timeout.Infinite:用于为接受Int32参数的线程方法指定无限等待时间的常量。

答案 1 :(得分:6)

这是一个特殊的情况,基本上意味着睡觉,直到有人刺激你&#34; - 通过调用Thread.Interrupt(),另一个线程可以做什么。然后睡眠线程应该捕获ThreadInterruptedException