2017-05-03 32 views
1

当我暂停顶级服务时,如何停止或暂停Quartz.Net?当我放弃顶部服务时,如何停止或暂停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

对什么'说Scheduler.Shutdown()'? – Rabban

回答

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; 
    } 
}