4

毎日特定の時間にタスクを実行するために Quartz.NET を使用しています。これが私のコードです。

public class TestSchedule : ISchedule
    {
        public void Run()
        {

            DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second);

            IJobDetail job = JobBuilder.Create<HelloJob>()
                                       .WithIdentity("job1")
                                       .Build();

            ITrigger trigger = TriggerBuilder.Create()
                                             .WithIdentity("trigger1")
                                             .StartAt(startTime)
                                             .WithDailyTimeIntervalSchedule(x => x.OnEveryDay().StartingDailyAt(new TimeOfDay(7, 0)).WithRepeatCount(0))
                                             .Build();

            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sc = sf.GetScheduler();
            sc.ScheduleJob(job, trigger);

            sc.Start();
        }
    }

私のコードは動作していますが、問題はそれが 1 回しか動作しないことです (それは のようですWithRepeatCount(0))。
PS:私はそれをしたくありませんCronTrigger

4

1 に答える 1

7

DailyTimeIntervalTriggerImplは、 repeatCountのみをサポートします。

このトリガーは、特定のカウント数に達した後にトリガーの起動時間を終了する「repeatCount」機能もサポートしています。SimpleTrigger と同様に、repeatCount=0 を設定すると、トリガーが 1 回だけ発火することを意味します。正のカウントを設定すると、トリガーは count + 1 回繰り返されます。ただし、SimpleTrigger とは異なり、このトリガーの repeatCount のデフォルト値は 0 ではなく REPEAT_INDEFINITELY に設定されています。

Cron 式は美しく、探しているものを実現するのに役立つ ツールがたくさんあります。

もう 1 つの方法は、SimpleTriggerImplを使用して、 24 時間ごとに間隔を設定することです。

ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1")
        .StartAt(startTime)
        .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInHours(24))
        .Build();
于 2013-06-25T11:09:35.310 に答える