您可以将多个触发器与一个作业关联。人们会立刻只有一次火灾和其他将每周火:
var jobDetail = new JobDetail("MyJob", "MyGroup", typeof(T));
// run in ten seconds, only once.
var once = new SimpleTrigger("Once",
null,
DateTime.UtcNow.AddSeconds(10),
null,
0,
TimeSpan.Zero);
// run weekly, start in 5 minutes to give 'once' trigger some time to run
Trigger weekly = TriggerUtils.MakeWeeklyTrigger(
"Weekly",
dayOfweek,
timeOfDay.Hours,
timeOfDay.Minutes);
weekly.StartTimeUtc = DateTime.UtcNow.Add(TimeSpan.FromMinutes(5));
once.JobName = jobDetail.Name;
weekly.JobGroup = jobDetail.Group;
once.JobName = jobDetail.Name;
weekly.JobGroup = jobDetail.Group;
_quartzScheduler.ScheduleJob(jobDetail, once);
_quartzScheduler.ScheduleJob(weekly);
或者你可以安排立即触发,当它触发重新安排为每周:
private static volatile Boolean firstRun = false;
public void Execute(JobExecutionContext context) {
if(firstRun) {
Trigger weekly = TriggerUtils.MakeWeeklyTrigger(
"Weekly",
dayOfweek,
timeOfDay.Hours,
timeOfDay.Minutes);
context.Scheduler.RescheduleJob("Once", "MyGroup", weekly);
firstRun = false;
}
}
另一种选择是只运行代码在启动时不涉及Quartz。只需使用ThreadPool。然后让Quartz只处理每周计划。如果你的代码不依赖于Quartz,这可能是一个好主意。
好吧,只是觉得有可能没有做出2触发器的方式。当我测试一次触发器时,我发现它实际上运行了两次,所以我确实喜欢它们曾经有过的例子。 – chobo2
@ chobo2:答案中的重复时间参数等于1.它是否多次触发?还是它是另一个触发器?你用什么样的例子? – Dmitry
@德米特里 - 这是同样的触发器,因为每个人都有相同的名字。这是我从石英文档中使用 - SimpleTrigger触发=新SimpleTrigger( “myTrigger”, 空, DateTime.UtcNow.AddSeconds(10),空 , 0, TimeSpan.Zero); – chobo2