不确定如何在Windows服务中处理多个定时线程

时间:2012-12-29 01:31:36

标签: multithreading c#-4.0 windows-services

这是我第一次整理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)对于2个简单的任务来说,这是一个非常好的方法。

由于

1 个答案:

答案 0 :(得分:1)

计时器不会等到任务完成后才能重新启动计时器。例如,如果您将计时器设置为20毫秒并且回调花费的时间超过20毫秒,那么在第一个结束之前您将获得另一个计时器。

我认为你的想法没有什么特别的错误。但是,如果这是您的所有服务正在进行(即只是坐在那里,等待每个间隔触发一次),您可以考虑将其作为一个简单的控制台模式程序并使用计划任务来执行它。查看Windows任务计划程序和schtasks命令行工具。