我想知道我有一份正在执行的工作,并且它正在运行的Windows服务已被告知停止。我怎么能延迟这个并等到所有工作完成并且quartz.net已关闭。
我只看到像
scheduler.Shutdown();
和
scheduler.IsStarted
答案 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);
}