0

ジョブをスケジュールするときに、ネットワークで検証された時間を使用する必要があります。

解決?

Quartz .NET の詳細 - 調査で行き詰まった場所

ITrigger のプロパティ StartTimeUtc がどのように使用されているかわかりません (以下の StartAt メソッドで設定)。

var sleepTrigger = (ISimpleTrigger)TriggerBuilder.Create()
            .WithIdentity("SleepTimeTrigger")
            .StartAt(sleepRunTime)
            .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
            .Build();

つまり、スケジュール ソース コードを変更するために、StartTimeUtc タイムスタンプを使用する特定の実装を確認する必要があります。また、ローカル システム時間とは無関係にスケジュールを設定し、代わりにネットワーク時間を使用するオプションを追加する必要があります。

4

1 に答える 1

1

Quartz 名前空間の下に静的クラスがありFunc<DateTimeOffset>、NTP 調整された日付/時刻を返すために使用できる を受け取る 2 つのメソッドがあります。これは「公式」の Quartz 日付/時刻ソースであり、単体テストを容易にするために実装されていますが、日付/時刻のカスタマイズにも使用できます。使用例は次のとおりです。

SystemTime.Now = () => {
    //return your custom datetime here
    /*
    var ntpTime = new NtpTime(server);
    return ntpTime.NowDateTimeOffset;
    */
};

SystemTime.UtcNow  = () => {
    //return your custom datetime here
    /*
    var ntpTime = new NtpTime(server);
    return ntpTime.UtcNowDateTimeOffset;
    */
};

上記のコードはコンパイルされないことに注意してください。 と の両方の現在の DateTimeOffset を取得する独自のメソッドを実装する必要がありNowますUtcNowNTP から時刻を取得するには多くの方法があります。ここここでいくつかの方法を見つけることができます。パフォーマンス上の理由から、呼び出しごとに ntp サーバーに問い合わせる代わりに、実装で現在の日時をキャッシュしてローカルにインクリメントすることをお勧めします。

于 2013-08-25T22:57:26.180 に答える