2011-09-21 46 views
1

我想在我的服务中使用计时器。但我听说定时器导致死锁问题。 假设如果我将计时器设置为每10分钟启动一次。 我的服务需要5分钟才能完成当前的执行。 但在某些情况下,需要更多时间(不可预知)。 那么如果我的服务在10分钟内无法完成当前的执行 ,会发生什么情况。 我当前执行的服务会发生什么? 感谢您的帮助。Windows服务中的计时器

回答

2

您可以在Windows服务中使用定时器,因为它也对MSDN

表示服务应用程序的设计是长时间运行。因此,它通常会轮询或监视系统中的某些内容。监控在OnStart方法中设置。但是,OnStart实际上并没有进行监控。一旦服务操作开始,OnStart方法必须返回到操作系统。它不能永远循环或阻止。要设置简单的轮询机制,您可以使用System.Timers.Timer组件。在OnStart方法中,您将在组件上设置参数,然后将Enabled属性设置为true。定时器会定期在您的代码中引发事件,届时您的服务可以进行监控。

尽管存在上述情况,您仍然需要创建逻辑以避免死锁或在Elapsed事件中指定的代码需要比间隔本身更长的时间。

Elapsed事件在ThreadPool线程上引发。如果处理Elapsed事件的持续时间比Interval长,则可能会在另一个ThreadPool线程上再次引发该事件。因此,事件处理程序应该是可重入的。

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.80%29.aspx