线程.睡眠(-1)

有什么用


 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)真正在做什么?


小唯快跑啊
浏览 221回答 2
2回答

茅侃侃

这是一种特殊情况,本质上意味着“睡眠直到有人刺激你”——另一个线程可以通过调用Thread.Interrupt().&nbsp;然后睡眠线程应该期望捕获ThreadInterruptedException.
打开App,查看更多内容
随时随地看视频慕课网APP