首页 文章

使用新触发器设置的Quartz.NET重新调度作业

提问于
浏览
4

我有一个Quartz作业,它安排了一组触发器,它有3到5分钟的执行时间 . 但是在将来的任何时候(可能是一周后或几分钟后)我可能需要使用新的触发器重新安排它 . 触发器集上会有一些添加或删除 .

如何使用新的触发器设置重新安排工作?这里的诀窍是,我想确保当时没有任何工作实例,所以我可以可靠地重新安排工作 . 谢谢你的帮助...

2 回答

  • 3

    我记得它,你可以这样做:

    List<JobExecutionContext> context = scheduler.GetCurrentlyExecutingJobs()
    

    迭代列表并调用GetJobInstance()(或类似的东西)来查找创建上下文的作业,然后检查它是否是您感兴趣的作业 . 如果不是,您可以使用相同的触发器重新安排 . 尝试这样的事情:

    Trigger trigger = Global.scheduler.GetTrigger("testTrigger","triggerGroup");
    
    trigger.set(); 
    
    Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, trigger);
    
  • 0

    我重新安排了ActiveDirectoryJob如下:

    public class ActiveDirectoryJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            var staffService = new StaffService();
    
            staffService.Synchronize();
    
            int intervalTime=2;
            ITrigger rsiTrigger = TriggerBuilder.Create()
            .WithIdentity(context.Trigger.Key.Name)
            .StartAt(DateTime.Now.AddHours(intervalTime))
            .WithSimpleSchedule(x => x
            .WithIntervalInHours(intervalTime)
            .RepeatForever())
            .Build();
    
    
            context.Scheduler.RescheduleJob(new TriggerKey(context.Trigger.Key.Name, ((AbstractTrigger)context.Trigger).Group), rsiTrigger);
    
        }
    }
    

    PS:

    我正在使用Quartz v2.6.1

相关问题