为什么Thread.Sleep在长时间内不准确?

ale*_*cd4 1 c# multithreading

我有一个用C#编写的服务.服务全天候是活动的,但是一个线程通过Thread.Sleep睡眠直到预定时间 - 通常是晚上9点到晚上11点 - 来执行一些内务处理任务.首次启动服务时,它会计算时间跨度,以毫秒为单位直到内务处理时间,并使用该时间跨度调用Thread.Sleep.下次线程只需调用Thread.Sleep(24*60*60*1000)即可24小时休眠.

它可以很好地工作,除了一次安装睡眠提前几分钟醒来 - 根据跟踪日志提前5-8分钟.几个星期后,家政服务时间会变化几个小时.我可以预期,看家时间可以向前移动 - 而不是向后移动.想知道是否有人可以得到解释.我必须承认,我不是在寻找一个不同的解决方案来解决这个问题 - 只是试图解释一下这个行为.

Sco*_*ain 10

Thread.Sleep不是像你一样设计用于长时间准确的睡眠.你应该使用像System.Threading.Timer这样的东西.你可以给它一个午夜的第一个运行时间,并让它每24小时运行一次.该Timer(TimerCallback, Object, TimeSpan, TimeSpan)构造正是你所期待的.