我有一個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