我需要在安排作业时使用网络验证的时间。
使用最新的.NET Quartz library,是否有任何了解Quartz .NET内部工作原理的人知道which class(es) actually implement在指定时间开始的工作? (详情如下)
或者是否有替代C#库/ API已经支持NTP查询并可以安排作业?
请注意using the approach of inputting the difference between local time and network time to a non-NTP scheduler does not work for me,因为我需要通过更改本地系统时间或时区来防止用户作弊
我找不到如何使用ITrigger的属性StartTimeUtc(使用下面的StartAt方法设置)?
var sleepTrigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("SleepTimeTrigger")
.StartAt(sleepRunTime)
.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
.Build();
即。我需要检查使用StartTimeUtc时间戳的具体实现,以便更改调度源代码/添加一个选项,以独立于本地系统时间进行调度,并使用网络时间。
答案 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;
*/
};
请注意,上面的代码无法编译,您需要实现自己的方法来获取Now
和UtcNow
的当前DateTimeOffset。有很多方法可以从NTP获得时间,您可以找到一些方法here和here。我建议你的实现缓存当前的日期时间并在本地增加它,而不是在每次调用时都询问ntp服务器,这是出于性能原因。