在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中文网其他相关文章!