使用Quartz调度两个不同的非并行作业

时间:2018-10-05 08:49:04

标签: c# quartz-scheduler

我有一个定期运行的调度程序任务(每分钟一次)。我使用以下代码段运行此任务:

Scheduler = await StdSchedulerFactory.GetDefaultScheduler().ConfigureAwait(false);
await Scheduler.Start().ConfigureAwait(false);
JobDetail = JobBuilder.Create<SchedulerJob>().Build();
Trigger = TriggerBuilder.Create().StartNow().WithPriority(1).WithCronSchedule(cronExpression).Build();
await Scheduler.ScheduleJob(JobDetail, Trigger).ConfigureAwait(false);

我现在想要/需要做的是安排另一个不并发的单独任务。这意味着第二个新任务具有优先权,当两个任务同时被调用并且第一个任务等待或不执行时,它始终处于运行状态。

两个类(SchedulerJob和新的类)都标记为[DisallowConcurrentExecution],但它们仍然同时运行。

我还尝试了JobDataMap的两种选择:

  • 重新使用JobDetail,与其他JobDataMap一起使用->问题是,调度程序不允许使用不同的映射再次调度同一JobDetail。
  • 在相同的类上使用相同的类,不同的JobDataMap创建新的JobDetail->问题是它们仍然同时执行,[DisallowConcurrentExecution]无效

Quartz是否有一种内置方式,使两个不同的JobDetails / Job类是非并发的?我想避免必须手动实施非并发检查。

0 个答案:

没有答案