在C# Windows服務中調度任務
對於需要在C#編寫的Windows服務中每天午夜執行任務的情況,建議使用任務調度器,而不是依賴Thread.Sleep()
和基於時間的檢查。
一個有效的方法是在服務中實作一個計時器。計時器應定期觸發,例如每10分鐘一次,並驗證自上次執行以來日期是否已更改。如果偵測到新日期,則計時器暫停,同時執行清理過程,確保它每天只執行一次。
<code class="language-csharp">private Timer _timer; private DateTime _lastRun = DateTime.Now.AddDays(-1); protected override void OnStart(string[] args) { _timer = new Timer(10 * 60 * 1000); // 每10分钟 _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); _timer.Start(); //... } private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { // 忽略时间,只比较日期 if (_lastRun.Date < DateTime.Now.Date) { // 在运行清理任务时停止计时器 _timer.Stop(); // // 执行清理任务 // _lastRun = DateTime.Now; _timer.Start(); } }</code>
以上是如何在 C# Windows 服務中安排每日任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!