为什么 AutoResetEvent WaitOne 在我的 PC 上的等待方式不同?

Why AutoResetEvent WaitOne waits differently on my PC?

我在控制台应用程序 (.net 4.5.2) 上做了一个小功能,以检查 AutoResetEvent.WaitOne 功能超时的准确性。 在我的笔记本电脑上,等待时间几乎与 WaitOne 的超时时间完全相同(右图)。 在我进行了 运行 这个测试的每个其他系统上,超时都高得多(左图)。 我尝试更新 .net 但没有任何变化。

这种不同的行为是否与我的特殊硬件 (Lenovo p52) 有关,或者我正在使用 visual studio?

private static void WaitTest()
{
    try
    {
        using (var lResetEvent = new AutoResetEvent(false))
        {
            _stopwatch.Restart();
            lResetEvent.WaitOne(1);
            var l1Ms = _stopwatch.ElapsedMilliseconds;
            _stopwatch.Restart();
            lResetEvent.WaitOne(10);
            var l10Ms = _stopwatch.ElapsedMilliseconds;
            _stopwatch.Restart();
            lResetEvent.WaitOne(20);
            var l20Ms = _stopwatch.ElapsedMilliseconds;

            Console.WriteLine($"-----------------------------------------------------------");
            Console.WriteLine($" 1ms WaitTest: {l1Ms:D2}ms");
            Console.WriteLine($"10ms WaitTest: {l10Ms:D2}ms");
            Console.WriteLine($"20ms WaitTest: {l20Ms:D2}ms");
            Console.WriteLine($"-----------------------------------------------------------");
        }
    }
    catch (Exception lEx)
    {
        Console.WriteLine(lEx.ToStringEx());
    }
}

If you're referring to the different delay times, you might want to google timeBeginPeriod for some background information. – 500 - Internal Server Error

带我去她: how to set timer resolution from C# to 1 ms?

现在正在做这项工作:

 using (new TimePeriod(1))
    lResetEvent.WaitOne(WaitTime);

计时器分辨率似乎不会影响 AutoResetEvent。它总是 15 毫秒:

        [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool GetSystemTimeAdjustment(out long lpTimeAdjustment, out long lpTimeIncrement, out bool lpTimeAdjustmentDisabled);