当我暂停topshelf服务时,如何停止或暂停Quartz.Net?
目前在所有示例中, - 注册不在启动/停止方法中:
factory.Service<IServiceHost>(sc =>
{
sc.ConstructUsing(s => new ServiceHost());
sc.WhenStarted((s, host) => s.Start(host));
sc.WhenStopped(s => s.Stop());
sc.WhenPaused(s => s.Pause());
sc.WhenContinued(s => s.Continue());
sc.ScheduleQuartzJob(...)
}
答案 0 :(得分:0)
Program.cs的
HostFactory.Run(factory =>
{
factory.UseNLog();
factory.UseAutofacContainer(Container);
factory.Service<ServiceHost>(service =>
{
service.ConstructUsingAutofacContainer();
service.WhenStarted((sc, hc) => sc.Start(hc));
service.WhenStopped((sc, hc) =>
{
Container.Dispose();
return sc.Stop(hc);
});
service.ScheduleQuartzJob(cfg => JobConfigurator.GetConfigurationForJob<DataImportJob>(cfg, Settings.Default.RecurrentTimeout));
factory.RunAsLocalSystem().StartAutomaticallyDelayed().EnableServiceRecovery(sr =>
{
sr.OnCrashOnly();
sr.RestartService(0);
sr.SetResetPeriod(1);
}).EnableShutdown();
});
ServiceControl.cs:
public class ServiceHost : ServiceControl
{
private readonly IScheduler _scheduler;
public CdcServiceHost(IScheduler scheduler)
{
Ensure.Argument.NotNull(scheduler);
_scheduler = scheduler;
}
public bool Start(HostControl hostControl)
{
if (!_scheduler.IsStarted)
{
_scheduler.Start();
}
Logger.Log.Debug("Service was started");
return true;
}
public bool Stop(HostControl hostControl)
{
Logger.Log.Debug("Stopping scheduler");
_scheduler.Shutdown(true);
Logger.Log.Debug("Service was stopped");
return true;
}
}