2017-04-21 4 views
0

私は今や繰り返しタスクのためにを使用しています。何らかの理由で、私は2つの特定の日に実行するタスクを作成する必要がありました。ここで私が作った実装があります:StartAt()を使用してプールを起動したときにクォーツジョブが実行される

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); 
scheduler.Start(); 

IJobDetail jobWeekEnd = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider()); 
ITrigger triggerWeekend = TriggerBuilder.Create() 
             .WithIdentity("Foo", "Bar") 
             .WithCronSchedule("0 0 9 ? * SAT-SUN") 
             .ForJob(jobWeekEnd) 
             .Build(); 

scheduler.ScheduleJob(jobWeekEnd, triggerWeekend); // WORKS WELL 

var jobNonWorkingDay = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider()); 
var trigger1 = TriggerBuilder.Create() 
          .WithIdentity("Foo2", "Bar") 
          .StartAt(new DateTimeOffset(new DateTime(2017, 04, 17, 09, 00, 00))) 
          .ForJob(jobNonWorkingDay) 
          .Build(); 
scheduler.ScheduleJob(jobNonWorkingDay, trigger1); 

var jobNonWorkingDay2 = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider()); 
var trigger2 = TriggerBuilder.Create() 
           .WithIdentity("Foo3", "Bar3") 
           .StartAt(new DateTimeOffset(new DateTime(2017, 05, 01, 09, 00, 00))) 
           .ForJob(jobNonWorkingDay2) 
           .Build(); 
scheduler.ScheduleJob(jobNonWorkingDay2, trigger2); 

TRIGGER1とトリガ2は、正しい時刻にないトリガーするようですが、それぞれの時間は、私はプールをリサイクルし、ランダムに、最後の発生は午前11時16分15秒にありました。

私はどこを掘るべきかについての手掛かりはありますか?

+1

Quartz.NETを使用しているようですが、質問を編集して適切なタグを設定しました。 – walen

+0

更新のための@walenありがとう –

+0

ジョブをスケジューリングした後でスケジューラを開始しようとします。 1)scheduler.ScheduleJob(...) 2)scheduler.Start(); – NikNik

答えて

0

最初のスケジューラの日付が過去(new DateTime(2017, 04, 17, 09, 00, 00))で、EndAtが定義されていないため、起動時にトリガが1回発生しました。この情報は、以下の2つのオプションから:

  1. EndAt()を使用して終了値を設定します - 迅速かつサラウンド日付チェックと初期化
  2. クリーン - 次の読者のための非自明な解が、役に立たないジョブの登録を避けます。
関連する問題