Quartz.NET运行Job Self-Reschedule?

Sno*_*owy 4 scheduled-tasks quartz.net c#-4.0

我已经完全以编程方式创建了Quartz.NET作业(没有配置文件等).它按计划运行很好.使用cron字符串初始化作业,每5分钟运行一次.我希望工作能够根据环境改变自己的时间表(例如,随着时间的推移会发生错误,因此cron应该更改为30分钟).

我正在努力确定写些什么

protected override void ExecuteInternal( IJobExecutionContext context )
Run Code Online (Sandbox Code Playgroud)

方法所以工作"改变自己".我是否在context.Scheduler属性中设置了一些内容?我是否必须去调度程序本身并终止该作业并重新创建它(虽然听起来有点沉重的代价)?

所有的想法都赞赏,谢谢.

小智 5

虽然我没有使用Quartz.NET,但我在Java项目中使用了Quartz,我认为它们是相似的.我已经实现了类似于您描述的解决方案.在executeInteral方法中,您可以访问jobexecution上下文.基本上它涉及创建一个新的触发器,然后重新安排工作(rescheduleJob).因此,当条件出现时,你会做类似的事情:

protected void ExecuteInternal( IJobExecutionContext context ) {
  // ... some code
  if (the_condition) {
     // figure out startTime
     // figure out endTime
     // figure out repeat time
     // figoure out repeatInterval
     Trigger trigger = new SimpleTrigger("OurNewTrigger","GROUP_NAME", context.getJobDetail().getName(),context.getJobDetail().getGroup(), startTime, endTime,repeatTime,repeatInterval);
     context.getScheduler().rescheduleJob("OurNewTrigger","GROUP_NAME",trigger);
  }
  // ... some more code
}
Run Code Online (Sandbox Code Playgroud)

沿着这些路线.希望这可以帮助.