在Quartz .NET中使用网络时间服务器(SNTP)进行调度

时间:2013-06-11 15:12:18

标签: c# .net quartz-scheduler scheduler ntp

我需要在安排作业时使用网络验证的时间。

解决方案?

Quartz .NET详细信息 - 我在调查中陷入困境

我找不到如何使用ITrigger的属性StartTimeUtc(使用下面的StartAt方法设置)?

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

即。我需要检查使用StartTimeUtc时间戳的具体实现,以便更改调度源代码/添加一个选项,以独立于本地系统时间进行调度,并使用网络时间。

1 个答案:

答案 0 :(得分:1)

Quartz命名空间下有一个静态类,它有两个接收Func<DateTimeOffset>的方法,可用于返回NTP调整的日期/时间。它是“官方”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;
    */
};

请注意,上面的代码无法编译,您需要实现自己的方法来获取NowUtcNow的当前DateTimeOffset。有很多方法可以从NTP获得时间,您可以找到一些方法herehere。我建议你的实现缓存当前的日期时间并在本地增加它,而不是在每次调用时都询问ntp服务器,这是出于性能原因。