我正在使用quartz.net 2.3 作业标记有 DisallowConcurrentExecution 属性。当 TriggerJob 手动启动作业时,如果作业已经在进行中,则不会启动,这是正常的。但当之前的执行完成后,它会立即重新开始。如果在作业正在进行时被解雇,是否可以阻止将来的执行?
是的。您可以检索该作业的所有触发器,将它们与正在执行的触发器进行比较,如果它们被安排在该作业之后,则取消安排该作业(触发器将被删除)。
所以,从你的工作来看:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3075 次 |
| 最近记录: |