ManualResetEventSlim.Wait() - TimeSpan与int的超时

时间:2018-04-30 12:53:58

标签: c# .net manualresetevent waithandle

您可以使用ManualResetEventSlim.Wait(TimeSpan timeout)ManualResetEventSlim.Wait(int millisecondsTimeout)

int.MaxValue(2,147,483,647 - 约24.85天)远低于TimeSpan.MaxValue.TotalMilliseconds(922,337,203,685,477 - 约10,675,199.11天)。

我怀疑这些重载的使用之间存在差异。

1 个答案:

答案 0 :(得分:0)

根据Reference Source for mscorlib(.NET Framework 4.7.1):

public bool Wait(TimeSpan timeout)
{
    long totalMilliseconds = (long)timeout.TotalMilliseconds;
    if (totalMilliseconds < -1 || totalMilliseconds > int.MaxValue)
    {
        throw new ArgumentOutOfRangeException("timeout");
    }

    return Wait((int)totalMilliseconds, new CancellationToken());
}

Wait(TimeSpan timeout)检查TotalMilliseconds是否为正int值范围,然后调用Wait(int millisecondsTimeout)

所以无论如何最大等待值将是int.MaxValue。对于所有WaitHandle个继承者也是如此。