【发布时间】:2011-09-30 06:13:10
【问题描述】:
我有一个用 C# 编写的服务。服务全天候处于活动状态,但一个线程通过 Thread.Sleep 休眠到预定时间 - 通常是晚上 9 点到晚上 11 点 - 以执行一些内务处理任务。首次服务启动时,它以毫秒为单位计算时间跨度,直到管家时间,并使用该时间跨度调用 Thread.Sleep。下次线程只需调用 Thread.Sleep(24*60*60*1000) 来休眠 24 小时。
除了单一安装,它工作得很好,当睡眠提前几分钟 - 根据跟踪日志提前 5-8 分钟唤醒时。在几个星期内,家政时间会改变几个小时。我可以预期,管家时间可以向前移动,而不是向后移动。想知道是否有人可以解释一下。我必须承认,我不是在寻找解决问题的不同解决方案 - 只是试图解释这种行为。
【问题讨论】:
-
系统时钟本身是否在该机器上漂移?
-
不要使用睡眠。
-
也许系统时钟在某处被重置?对于调试,您可以有另一个线程每 10 分钟打印一个日志行
-
您是否尝试过使用“计划任务”?您可能还想尝试一下taskscheduler.codeplex.com
-
Quartz.NET 在这些情况下是主角
标签: c# multithreading