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

Multithreading 不确定如何在Windows服务中处理多个定时线程,multithreading,c#-4.0,windows-services,Multithreading,C# 4.0,Windows Services,这是我第一次组装一个Windows服务应用程序,我已经阅读了一些关于以某种时间间隔运行多个任务的不同方法。一天一次,一分钟一次 我的结论是使用TimedCallBack和System.threating.timer 不优雅的例子 private void DailyTask(object state) { //do something daily } private void IntervalTask(object state) { //do something else } pri

这是我第一次组装一个Windows服务应用程序,我已经阅读了一些关于以某种时间间隔运行多个任务的不同方法。一天一次,一分钟一次

我的结论是使用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) 对于两个简单的任务来说,这是一个非常好的方法


谢谢

计时器不会等到任务完成后才重新启动计时器。例如,如果您将计时器设置为20毫秒,并且回调处理时间超过20毫秒,则在第一次完成之前,您将获得另一个刻度


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

计时器不会等到任务完成后才重新启动计时器。例如,如果您将计时器设置为20毫秒,并且回调处理时间超过20毫秒,则在第一次完成之前,您将获得另一个刻度

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