Я использую TopShelf для сборки оконных сервисов и пакета TopShelf.Quartz. Возможно ли завершить работу всего сервиса с помощью метода Execute IJob? Сейчас я могу только удалить работу. Например, если я поймаю конкретное исключение в задании, я хотел бы сделать службу регистрации и выключения.Служба выключения из QuartzJob
Спасибо за любой ответ.
public class Program
{
public static void Main()
{
HostFactory.Run(c =>
{
// Topshelf.Ninject (Optional) - Initiates Ninject and consumes Modules
c.UseNinject(new SampleModule());
c.Service<SampleService>(s =>
{
//Topshelf.Ninject (Optional) - Construct service using Ninject
s.ConstructUsingNinject();
s.WhenStarted((service, control) => service.Start());
s.WhenStopped((service, control) => service.Stop());
// Topshelf.Quartz.Ninject (Optional) - Construct IJob instance with Ninject
s.UseQuartzNinject();
// Schedule a job to run in the background every 5 seconds.
// The full Quartz Builder framework is available here.
s.ScheduleQuartzJob(q =>
q.WithJob(() =>
JobBuilder.Create<SampleJob>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(5)
.RepeatForever())
.Build())
);
});
});
}
}
public class SampleJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//Here I want catch exception and shoutdown service
}
}
Спасибо за ответ, но я хочу отключить весь сервис не только планировщик. Я понятия не имею, как отправлять информацию с кварца на верхнюю часть об этом исключении и услуге крика – Zabaa
@Zabaa посмотреть примеры здесь https://github.com/dtinteractive/Topshelf.Integrations, кажется, последнее ваше дело. также, обновленный ответ – Backs
Это, но заставим вашу службу внедрить ServiceControl и позволить Topshelf вызывать эти методы вместо использования вышеперечисленных делегатов. Затем, когда вы хотите остановить, вызовите HostControl.Stop(). HostControl - это аргумент для метода Start ServiceControl. –