如何检查所有作业是否在关机前完成运行? - Quartz.net

时间:2011-08-18 16:07:58

标签: c# windows-services quartz.net

我想知道我有一份正在执行的工作,并且它正在运行的Windows服务已被告知停止。我怎么能延迟这个并等到所有工作完成并且quartz.net已关闭。

我只看到像

 scheduler.Shutdown();

scheduler.IsStarted

3 个答案:

答案 0 :(得分:3)

您可以使用API-Doc

public virtual void Shutdown( 
  bool waitForJobsToComplete
)

这告诉Quartz.Net要等到所有工作完成,或API-Doc

virtual IList GetCurrentlyExecutingJobs()

此外,您应该要求操作系统等待您的服务MSDN

[ComVisibleAttribute(false)]
public void RequestAdditionalTime(
int milliseconds
)

否则Windows会在20秒后终止您的服务(取决于您的系统设置)Source

  

为防止服务停止关闭,SCM只会等待服务限制以自行停止。此限制的默认值为20秒(此值位于HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control中的注册表项WaitToKillServiceTimeout()中)

啊,不要忘记系统关机,windows不喜欢等待......

答案 1 :(得分:0)

如果您正在使用/安装分发附带的服务,则默认情况下,调度程序将等待所有作业完成执行。你不需要做任何事情。如果您编写了自己的服务包装器,请使用@Andreas的答案中提到的Shutdown方法。

答案 2 :(得分:0)

因为Shutdown()Task,所以您需要等到完成为止(请参见下面的代码),否则WindowsService主线程将不会等待Quartz完成其所有工作,包括未完成的作业

使用Shutdown(waitForJobsToComplete = true)的重载来等待作业完成:

scheduler.Shutdown(waitForJobsToComplete = true);

while (!scheduler.IsShutdown)
{
    //waiting for shutdown to be completed
    Thread.Sleep(1000);
}