我想实现一个在精确时间回调方法的方法。我们可以拥有的不仅仅是可以同时调用的方法。
public void CallmeBack(DateTime time, Action callback)
{
}
C#中最好的实现是什么?
我快速而又肮脏的解决方案是创建一个字典Dictionary<DateTime, List<Action>>
并每隔一分钟(分钟/秒)制作一个计时器,并检查时间(DateTime.Now
)和测试模式下的当前时间。
如果当前机器时间发生变化,解决方案必须为“安全”。所以像这样的简单解决方案无法工作:
Timer timer = new Timer((param) => {callback.Invoke();}, null,
(long)(time - DateTime.Now).TotalMilliseconds, Timeout.Infinite);
修改: 简易定时器不工作的典型情况是DST和手动时间/日期调整。 另外,我只想要多次执行回调。
答案 0 :(得分:2)
您正在寻找的是一个cron库。那里有很多。有些功能很多,而且有点重。这是一篇关于cron作业和我在生产代码中使用的库的博客文章。
http://blog.bobcravens.com/2009/10/an-event-based-cron-scheduled-job-in-c/
希望有助于您入门。
鲍勃
答案 1 :(得分:1)
您可能需要考虑几种选择:
您可以使用任务计划程序,例如:http://taskscheduler.codeplex.com/
你可以坚持使用计时器,并使用SystemEvents.TimeChanged
监听时间变化。该事件由用户时间更改触发。我假设您可以在首先设置计时器时处理可预测的时间变化(夏令时等)。我不确定与NTP相关的更改 - 您需要进一步调查。