Я недавно начал использовать quartz.net, и у меня возник вопрос о безопасности потоков.
public class QuartzService
{
public async Task Start()
{
// construct a scheduler factory
NameValueCollection props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
// get a scheduler
IScheduler sched = await factory.GetScheduler();
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<TestJob>().StoreDurably()
.WithIdentity("myJob", "jobGroup1")
.Build();
await sched.AddJob(job, true);
// Trigger the job to run now, and then every 40 seconds
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("myTrigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.ForJob(job)
.Build();
// Trigger the job to run now, and then every 40 seconds
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("myTrigger2", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.ForJob(job)
.Build();
await sched.ScheduleJob(trigger1);
await sched.ScheduleJob(trigger2);
await sched.Start();
}
}
public class TestJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
}
В приведенном выше примере у меня есть работа с двумя триггерами. У меня вопрос: два триггера совместно используют один и тот же экземпляр задания при запуске? Или каждый раз, когда запускается триггер, создается новый экземпляр IJobDetail. Я пытался прочитать документацию на quartz.net, но это очень запутанно, поскольку он смешивает экземпляры JobDetail с экземпляром задания, и мне не совсем понятно, какова здесь ситуация.