背景如下:Windows服务应该在给定时间每天执行一次操作。
我目前通过创建计时器并添加了ElapsedEventHandler来实现此目的。事件每隔t分钟触发一次,然后检查我们是否通过了配置的时间。如果是,则执行操作,如果没有,则没有任何反应。
一位同事问我,是否只有一个包含sleep()的while(true)循环并不容易,当然还有相同的逻辑来检查我们是否已超出行动时间。
问题: 可以说一个事件与一段时间(循环)的“稳健性”吗?我正在考虑线程“死”的情况,因此while(true)循环退出。这种情况在另一种情况下是否“更可能”发生?
答案 0 :(得分:8)
我不投票。
如果您的服务闲置一整天,定期唤醒(并且分页代码)以查看“是否该运行”,那么这是一个更适合Windows Task Scheduler的任务。您可以通过任务计划程序以编程方式安装每天运行的任务。然后你的代码根本不需要运行,除非是时候运行了。 (或者,如果您的服务确实需要在后台运行,则调度程序中的任务可以指示您的服务唤醒而不是计时器逻辑。)
答案 1 :(得分:0)
如果您使用正确的错误处理,两者都将同样强大 如果您没有使用正确的错误处理,它们将同样脆弱。
while(true)
{
...
Thread.Sleep(1000);
}
在回复OnStop
等标准服务事件时,会使您的服务变慢。
此外,你在哪里放置你的while循环?在一个单独的线程?如果你也使用循环,你将获得更多的手动管理。
总结一下:使用计时器。