如何处理服务启动和关闭事件?

时间:2014-02-26 14:30:07

标签: c# quartz.net

我使用quartz.net作为Windows服务来安排我的工作。我的工作是长期运行的,如果石英服务停止,我需要优雅地终止它们(有人手动停止/重新启动它或Windows关闭/重新启动;这没关系)。我可以在我的工作中处理任何Quartz关闭事件吗? Quartz还有一个启动事件,我可以处理它在我的数据库中设置一些启动值吗?我正在使用c#作为我的工作。

2 个答案:

答案 0 :(得分:0)

当您的应用程序关闭时,您是否尝试过调用IScheduler.Shutdown(true)? 应该允许正常关闭:)

答案 1 :(得分:0)

如果你得到这个代码库:

https://github.com/quartznet/quartznet/tree/master/server/Quartz.Server

很多工作已经完成。

您应该调试代码。 但是ashga是正确的.... IScheduler.Shutdown(true)允许优雅的关闭。这意味着......它将尝试完成任何已经在运行的工作。

如果你使用控制面板来“停止服务”.........它可能会调用优雅的方法(我猜,我不确定)...... ..如果优雅停止在Control-Panel-Service-Shutdown(超时)发生之前结束......它会好起来的。

如果“正常关机”比控制面板服务关机(超时)花费更长时间......您将收到类似于“您的服务没有及时关闭”的Windows消息。< / p>

........

如果你正在使用内存数据存储(Quartz.Simpl.RAMJobStore)......你可以在服务重启上做很多事情。

如果您正在使用ADO网络数据存储区(“Quartz.Impl.AdoJobStore.JobStoreTX”)...那么有一些“从我离开的地方接收”的东西.......这是更深层次的要研究的问题。 “失火”将是需要关注的术语之一。

如果您使用内存中的数据存储区(Quartz.Simpl.RAMJobStore)不合理地停止.....它与您关闭计算机电源的方式基本相同........再次启动时,它不会知道任何“状态”。