我正在使用quartz.net 2.3 作业标记为DisallowConcurrentExecution属性。当TriggerJob手动启动作业时,如果它已经在进行中,则它不会启动,这没关系。但是,当前一次执行完成时,它会立即再次启动。 如果在作业进行时被触发,是否可以防止将来执行?
答案 0 :(得分:2)
是。您可以检索作业的所有触发器,将它们与执行的触发器进行比较,如果在它之后进行了调度,则取消预定作业(触发器将被删除)。
所以,从你的工作:
public void Execute(IJobExecutionContext context)
{
var currentlyExecutingTrigger = context.Trigger;
var currentlyExecutingJobkey = context.JobDetail.Key;
var newTriggers = context.Scheduler.GetTriggersOfJob(key);
//if trigger was scheduled after currently executing trigger
foreach (var newTrigger in newTriggers)
{
if (newTrigger.StartTimeUtc >= trigger.StartTimeUtc)
{
//delete it
context.Scheduler.UnscheduleJob(newTrigger.Key);
}
}
}
答案 1 :(得分:1)
如何同时禁止作业?
Quartz.NET 2.x
实现IJob并使用[DisallowConcurrentExecution]属性装饰您的作业类。有关详细信息,请阅读DisallowConcurrentExecutionAttribute的API文档。
你可以在那里找到文档 enter link description here
答案 2 :(得分:0)
我认为你正在寻找这个:
myJobTrigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
我还没有尝试过,但似乎它与DisallowConcurrentExecution属性配合使用