1つのジョブに複数のトリガーを関連付けることができます。一つは、すぐに一度だけ火なり、もう一方は毎週発生します:
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;
}
}
別のオプションは、ちょうどあなたのコードを実行することですクォーツを使わずに始動してください。ちょうどThreadPoolを使用してください。そして、Quartzに毎週スケジュールだけをさせてください。これは、あなたのコードがQuartzに依存していない場合に可能です。これは一般的には良い考えです。
ちょうど2トリガーを作成せずに方法があるかもしれないと思った。私が一度トリガをテストしていたとき、私はそれが実際に2回実行されたことを発見しました。 – chobo2
@ chobo2:答えの繰り返し時間パラメータは1に等しいです。複数回起動しましたか?それとも別の引き金でしたか?どのような例を使用していましたか? – Dmitry
@ドミトリー - それぞれ同じ名前の同じトリガーでした。これは私が石英のドキュメントから使用したものである - SimpleTriggerトリガー=新SimpleTrigger( "myTrigger"、 ヌル、 DateTime.UtcNow.AddSeconds(10)、 ヌル、 0、 TimeSpan.Zero)。 – chobo2