1

这是我第一次将 Windows 服务应用程序放在一起,并且我一直在阅读一些关于以某种时间间隔运行多个任务的不同方法。一个是每天一次,另一个是每 1 分钟。

我得出的结论是使用 TimedCallBack 和 System.threating.timer 计时器。

不优雅的例子

private void DailyTask(object state) {
  //do something daily
}

private void IntervalTask(object state) {
  //do something else
}

private void OnStart() {
  TimedCallBack dailyTcb = DailyTask;
  TimedCallBack intervalTcb = IntervalTask;
  System.Threading.Timer dailyTimer = new Timer(dailyTcb, null, 0, 86400000);
  System.Threading.Timer intervalTimer = new Timer(intervalTcb, null, 0, 60000);
}

private void OnStop() {
  intervalTimer.Dispose();
  dailyTimer.Dispose();
}

问题

1)定时器是否在任务完成后开始计时?如果每次运行都需要一些时间才能完成,这会慢慢导致它超过一天?我会假设我需要确定运行负 24 小时需要多长时间?

2)对于两个简单的任务来说,这是一个完美的方法吗?

谢谢

4

1 回答 1

1

计时器不会等到任务完成后才重新启动计时器。例如,如果您将计时器设置为 20 毫秒,而回调的处理时间超过 20 毫秒,那么您将在第一个完成之前获得另一个滴答声。

我看不出你的想法有什么特别不对劲的地方。但是,如果这就是您的服务所做的全部(即只是坐在那里,等待每个间隔触发一次),您可能会考虑将其设为一个简单的控制台模式程序并使用计划任务来执行它。查看 Windows 任务计划程序和 schtasks 命令行工具。

于 2012-12-29T01:45:01.340 回答