Mik*_*son 16
我假设你已经尝试了一些东西,它漂移了.
如果你想要从每小时(5,10,15,20 ..)开始每隔5秒发射一次,你可以将你的计时器设置为触发一次,然后在你的回调中,重置计时器以触发DateTime.Now +到下一个5秒间隔的秒数.
只要你的时钟是正确的,这就可以防止任何漂移.
像这样的东西
System.Timers.Timer timer = new Timer();
void Init()
{
timer.Elapsed += timer_Elapsed;
int wait = 5 - (DateTime.Now.Second % 5);
timer.Interval = wait*1000;
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
int wait = DateTime.Now.Second % 5;
timer.Interval = wait * 1000;
timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
抱歉只给你一个链接到quartz.net,但这是一个完全合格的企业,经过测试的...库......你不需要重新发明轮子:)
如果你担心开销,你对开销的定义是什么?是文件大小(二进制文件大约是0.5mb)还是逻辑中的开销.逻辑部分:我认为实现他们IJob的接口可以很好地强制推出更好的消费者代码.我不是内联方法的大朋友(就像一个例子,因为你可能会在计时器过去时发出指针) - 类会给你更多的可能性,再一次,强迫更好的oop,域设计,... .
但是:Console.WriteLine(...)使用quartz.net会有点矫枉过正...... :)