0

我有一些微妙的代码依赖于 Task.Delay 足够准确,以至于它不会延迟少于预期的延迟。如果延迟更多,那很好。基本上,它归结为:

    var now = DateTime.UtcNow;
    var then = now + TimeSpan.FromMilliseconds(10);

    await Task.Delay(10);

    if (DateTime.UtcNow < then)
    {
        // Is it possible to get here?
    }

我想知道 if 语句中的谓词是否有可能变为真 - 可能 Task.Delay 延迟稍微少一点,或者 DateTime.Now 稍微不准确?

假设在执行期间永远不会调整时钟。

这是硬件依赖,操作系统依赖,还是可以保证总是错误的?

4

1 回答 1

1

总之,两者Task.DelayDateTime.Now受到系统时钟精度的限制。在 Windows 系统上,显然是 ~10-15 毫秒(参见下面的参考资料)。因此,如果您需要更高的精度,我会避免依赖本质上不那么精确的东西。

参考:

于 2020-11-17T23:31:25.393 回答