任务调度程序过早地运行任务几毫秒

时间:2015-11-17 22:14:58

标签: c# windows-server-2008-r2 taskscheduler

我有一个带触发器的任务:

At 0:00 every day - after triggered, repeat every 1 hours for a duration of 1 day.

在我的应用程序中,我以这种方式阅读时间:

dateTimeUtcNow = DateTime.Now;

有时,极少数情况下,dateTimeUtcNow会显示完整小时前几毫秒的时间,例如2015-11-11 14:59:59,914

服务器在Windows Server 2012 R2上运行,我可以在家庭版本上接受此功能,但不能生产。

为什么呢?这是一个错误吗?我该如何防止这种情况?

1 个答案:

答案 0 :(得分:5)

查看Eric Lippert关于DateTime准确性或缺乏准确性的文章。 Link here.

文章的关键段落:

  

简而言之,问题是“它现在几点了?”真的应该只是   回答到反映准确度的精确度   系统固有的。大多数计算机时钟都不准确   甚至在官方时间的毫秒内同步,并且   因此超出这种精度水平的精度是一个谎言。它是   在我看来,相当不幸的是,DateTime结构确实如此   表面尽可能精确,因为它看起来像   对该结构的操作也应该准确到该水平。   但他们几乎肯定不那么准确。

如果你真的需要计时器在午夜之前起飞而不是很快,那么你将不得不强迫一个"稍微"未来的日期/时间已在评论中提出。你实际上没有比这更多的控制权。