У меня есть второй триггер с WithMisfireHandlingInstructionDoNothing
:
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/1 0/1 0/1 1/1 * ? *", x => x.WithMisfireHandlingInstructionDoNothing())
.StartNow()
.Build();
со следующим JobDetail:
var jobDetail = JobBuilder.Create<TestJob>()
.WithIdentity(JobKey.Create("TestJob")).Build();
и TestJob
с DisallowConcurrentExecution
:
[DisallowConcurrentExecution]
public class TestJob : IJob
{
private static int counter;
public Task Execute(IJobExecutionContext context)
{
var threadId = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"Job start on thread: {threadId}. datetime: {DateTime.Now}");
if (counter++ < 3)
{
Console.WriteLine("Sleeping.");
Thread.Sleep(5000);
}
Console.WriteLine($"Job END on thread: {threadId}. datetime: {DateTime.Now}");
return Task.CompletedTask;
}
}
и вот как инициализируется планировщик:
var scheduler = new StdSchedulerFactory().GetScheduler().GetAwaiter().GetResult();
scheduler.ScheduleJob(jobDetail, trigger);
scheduler.Start();
Результат, который я получаю:
Job start on thread: 6. datetime: 14/07/2020 9:45:15
Sleeping.
Job END on thread: 6. datetime: 14/07/2020 9:45:20
Job start on thread: 12. datetime: 14/07/2020 9:45:20
Sleeping.
Job END on thread: 12. datetime: 14/07/2020 9:45:25
Job start on thread: 15. datetime: 14/07/2020 9:45:25
Sleeping.
Job END on thread: 15. datetime: 14/07/2020 9:45:30
Job start on thread: 13. datetime: 14/07/2020 9:45:30
Job END on thread: 13. datetime: 14/07/2020 9:45:30
Job start on thread: 15. datetime: 14/07/2020 9:45:30
Job END on thread: 15. datetime: 14/07/2020 9:45:30
Job start on thread: 12. datetime: 14/07/2020 9:45:30
Job END on thread: 12. datetime: 14/07/2020 9:45:30
Job start on thread: 6. datetime: 14/07/2020 9:45:30
Job END on thread: 6. datetime: 14/07/2020 9:45:30
Job start on thread: 13. datetime: 14/07/2020 9:45:30
Job END on thread: 13. datetime: 14/07/2020 9:45:30
Job start on thread: 14. datetime: 14/07/2020 9:45:30
Job END on thread: 14. datetime: 14/07/2020 9:45:30
Job start on thread: 15. datetime: 14/07/2020 9:45:30
Job END on thread: 15. datetime: 14/07/2020 9:45:30
Job start on thread: 14. datetime: 14/07/2020 9:45:30
Job END on thread: 14. datetime: 14/07/2020 9:45:30
Job start on thread: 15. datetime: 14/07/2020 9:45:30
Job END on thread: 15. datetime: 14/07/2020 9:45:30
Job start on thread: 6. datetime: 14/07/2020 9:45:30
Job END on thread: 6. datetime: 14/07/2020 9:45:30
Job start on thread: 14. datetime: 14/07/2020 9:45:30
Job END on thread: 14. datetime: 14/07/2020 9:45:30
Job start on thread: 13. datetime: 14/07/2020 9:45:30
Job END on thread: 13. datetime: 14/07/2020 9:45:30
Job start on thread: 14. datetime: 14/07/2020 9:45:30
Job END on thread: 14. datetime: 14/07/2020 9:45:30
Job start on thread: 13. datetime: 14/07/2020 9:45:31
Job END on thread: 13. datetime: 14/07/2020 9:45:31
Job start on thread: 6. datetime: 14/07/2020 9:45:32
Job END on thread: 6. datetime: 14/07/2020 9:45:32
Как видите, задание не одновременно, что хорошо. но чего я не хочу, так это того, чтобы триггер второго задания складывался, пока задание спит в первых трех запусках. После трех запусков все триггеры, которые сложены, срабатывают сразу после друг друга. начиная с 14/07/2020 9:45:30
задание вызывается не менее 15 раз. Я не хочу такого поведения. Я не хочу, чтобы эти вызовы складывались, пока задание занято.
Я думал, что могу использовать WithMisfireHandlingInstructionDoNothing
для этого, но это не имеет никакого эффекта.
Надеюсь, это ясно , спасибо за любую помощь.
EDIT
Вероятно, misfireThreshold связан с тем, что я получаю. Как это настроить в C#?