I have an issue with System.Threading.Timer. I am scheduling some actions using a time in a windows service. The timer starts executing the callback after a specified dueTime period. The windows service starts up after reboot automatically. However, I have observed a strange thing after a system reboot- the callback method starts executing itself 3 or 4 minutes before the specified period. What might be the reason for such behavior?
Here is the sample code:
Ti开发者_C百科meSpan timeToWait = this.StartTime - DateTime.Now;
Int64 msToSleep = (Int64)Math.Round(timeToWait.TotalMilliseconds);
_timer = new Timer(callback_method, null, msToSleep, MinutesScheduledInterval * 60000);
where _timer is a member variable, StartTime - the time when the timer should first fire.
How soon after boot does your service start? The Windows Time service can adjust the clock to get it in sync with a domain controller. Your DateTime.Now value might be taken before that happens. Diagnose this first by entering the BIOS at boot-up and checking the clock. Fix it with a service dependency.
精彩评论