【发布时间】:2014-02-26 14:30:07
【问题描述】:
我使用quartz.net 作为Windows 服务来安排我的工作。我的工作运行时间很长,如果石英服务停止,我需要优雅地终止它们(有人手动停止/重新启动它或 Windows 关闭/重新启动;没关系)。我可以在我的工作中处理任何 Quartz 关闭事件吗? Quartz 是否还有一个启动事件,我可以处理它来在我的数据库中设置一些启动值?我正在为我的工作使用 c#。
【问题讨论】:
标签: c# quartz.net
我使用quartz.net 作为Windows 服务来安排我的工作。我的工作运行时间很长,如果石英服务停止,我需要优雅地终止它们(有人手动停止/重新启动它或 Windows 关闭/重新启动;没关系)。我可以在我的工作中处理任何 Quartz 关闭事件吗? Quartz 是否还有一个启动事件,我可以处理它来在我的数据库中设置一些启动值?我正在为我的工作使用 c#。
【问题讨论】:
标签: c# quartz.net
如果你得到这个代码库:
https://github.com/quartznet/quartznet/tree/master/server/Quartz.Server
很多工作已经完成。
您应该调试代码。 但是 ashga 是正确的.... IScheduler.Shutdown(true) 允许正常关闭。这意味着......它将尝试完成所有已经运行的作业。
如果你使用控制面板“停止服务”............它可能会调用优雅的方法(我猜,我不确定)...... ..所以如果在控制面板服务关闭(超时)发生之前优雅停止结束......它会很好。
如果“正常关闭”比控制面板服务关闭(超时)花费更长的时间......您将收到类似于“您的服务未及时关闭”的 Windows 消息。
........
如果您使用的是内存数据存储 (Quartz.Simpl.RAMJobStore)...在服务重启时您无能为力。
如果您使用的是 ADO 网络数据存储(“Quartz.Impl.AdoJobStore.JobStoreTX”)......那么有一些“从我离开的地方接上来”的东西............那就更深了要研究的问题。 “失火”将是要查看的术语之一。
如果您不优雅地停止使用内存数据存储(Quartz.Simpl.RAMJobStore)......它基本上与关闭计算机电源相同......当它再次启动时,它不会知道任何“状态”。
【讨论】:
您是否尝试过在应用程序关闭时调用 IScheduler.Shutdown(true)? 应该允许正常关机:)
【讨论】: