我有一个windows服务,它执行多个任务,我已将其分离为多个功能,有些可能需要5分钟才能完成,有些则需要更少。在windows服务中实现多种功能的正确方法
private System.Timers.Timer tim = null;
protected override void OnStart(string[] args)
{
tim = new System.Timers.Timer();
this.tim.Interval = 30000;
this.tim.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimedEvent_Tick);
tim.Enabled = true;
}
private void OnTimedEvent_Tick(Object source, System.Timers.ElapsedEventArgs e)
{
Task task0 = Task.Factory.StartNew(() => Function1()); // doing some database operations
Task task1 = Task.Factory.StartNew(() => Function2()); // doing some other database operation
Task task10 ......Up to Function10()
Task.WaitAll(task0,task1, task2, task3, task4,task5, task6,task7,task8,task9,task10);
}
有平局回到上面的方法?如果我的Windows服务运行让我们说每30秒。如果有我如何接近它?
感谢您的回复,如果Function1/2/3等未完成并且30秒定时器耗尽怎么办? – Dexter
你在这里打电话是一个代表。在里面你正在创建任务。所以,一旦它开始委托,定时器就没有什么可做的了。间隔完成后,它将在另一个线程中再次触发。处理它的一种方法是,您可以在第一次通话后禁用定时器。之后,在其中运行一个无限循环和代码。在代码的最后一行,您可以编写Thread.Sleep。 https://stackoverflow.com/questions/19151363/windows-service-to-run-a-function-at-specified-time https://stackoverflow.com/questions/18001733/net-multiple-timers-instances-mean - 多线程 – Amit