Kei*_*ith 6 .net c# multithreading timer
我有一个服务消耗的DLL.它的基本工作是每隔X分钟运行一次并执行一些系统检查.在我的DLL中,我有一个顶级类,声明了System.threading.timer和Timercallback.该类的构造函数使用我的线程函数初始化timerCallback.在我的"Onstart"处理程序中,我使用timercallback初始化计时器,并设置下次触发和间隔时间.在我的情况下,它每10分钟.通常在这10分钟的检查中,没有什么可做的,但服务被迫在设定的时间每天至少做一次.
我的问题:我发现在测试过程中,每天进行每日检查的时间会慢慢偏离8.30的预期开始时间.例如,大约20多天,我的时间从08:30升至08.31.35.它每天漂移大约4-6秒.
我的问题:有没有人知道为什么时间漂流这样,我怎么能坚持它的分配时间?
谢谢
时间"漂移",因为计时器根本就不那么精确.如果您需要尽可能密切地运行代码到某个时间间隔,您可以执行以下操作:
public void MyTimerCallback(object something) {
var now = DateTime.UtcNow;
var shouldProbablyHaveRun = new DateTime(
now.Year, now.Month, now.Day,
now.Hour, now.Minute - (now.Minute % 10), 0);
var nextRun = shouldProbablyHaveRun.AddMinutes(10.0);
// Do stuff here!
var diff = nextRun - DateTime.UtcNow;
timer.Change(diff, new TimeSpan(-1));
}
Run Code Online (Sandbox Code Playgroud)
...假设您正在使用System.Threading.Timer实例.如果您正在使用任何其他类型的计时器(有几个!),请修改该示例.
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |