2011-10-03 116 views
2

背景如下:应该在给定时间每天执行一次操作的Windows服务。事件与while(true)循环的比较

我目前通过创建一个计时器并添加了ElapsedEventHandler来实现此目的。事件每隔几分钟触发一次,然后检查我们是否通过了配置的时间。如果是这样的话,那么这个行为就会被执行,如果没有的话。

一位同事问我,如果只有一个包含sleep()的while(true)循环并不容易,那么当然还有相同的逻辑来检查我们是否已经过了行动时间。

问题: 可以说一个事件与一段时间(循环)的“健壮性”有什么关系吗?我正在考虑线程“死亡”以便while(true)循环退出的情况。这种情况在另一种情况下会更“可能”发生吗?

+0

该服务是否在执行其他任何操作,或者仅仅是每天运行一次?在任何情况下,随时也可以看看我的问题:http://stackoverflow.com/questions/481760/ –

+0

它没有执行该操作时处于空闲状态,因此闲置大部分时间。按照selbie的规定,我将检查Task Scheduler。谢谢。 –

回答

8

我不赞成投票。

如果你的服务只是周期性地闲置一整天,并定期醒来(和分页代码)以查看“是时候运行”,那么这是一个更适合Windows Task Scheduler的任务。您可以以编程方式安装任务,以便每天通过任务计划程序运行。然后,你的代码不需要运行,除非有时间运行。 (或者,如果您的服务确实需要在后台运行,则调度程序中的任务可以指示您的服务唤醒而不是定时器逻辑)。

+0

谢谢你的回答。我会看看任务计划程序。 –

0

如果您使用适当的错误处理,两者都将同样健壮。
如果你不使用正确的错误处理,它们将同样脆弱。

while(true) 
{ 
    ... 
    Thread.Sleep(1000); 
} 

在响应像OnStop这样的标准服务事件时,会使您的服务变慢。

此外,你把你的while循环?在一个单独的线程?如果您也使用循环,您将获得更多手动管理。

总结:使用计时器。