【问题标题】:Quartz.net job to start daily at given time with millisecond intervalQuartz.net 作业每天在给定时间以毫秒间隔开始
【发布时间】:2013-01-08 16:44:27
【问题描述】:

我正在试用 Quartz.net,它可能会解决我的一个问题。但是,我似乎无法找到一种方法在一天中的给定时间(07:30)开始工作,以毫秒(1)为间隔运行多次(1000)。

我尝试了 CronSchedule,但无法设置间隔。使用 SimpleSchedule,无法设置开始时间,使用 DailyTimeIntervalSchedule 我无法设置以毫秒为单位的间隔。我还尝试将设置与 varoius 与流利的 api 结合起来,没有 avale。

我尝试实现的目标在 Quartz.net 中实际上是不可能的吗?

【问题讨论】:

  • 您真的想在一秒钟内以毫秒为间隔运行作业 1000 次吗?您是否尝试过测试 Quartz.net 是否可以以这种速度执行作业?
  • 我认为它可以,因为可以使用 SimpleScheduele 以毫秒为单位设置间隔,但我没有对其进行基准测试或任何查看实际性能的东西。这是一个“简单”的负载测试。

标签: quartz.net


【解决方案1】:

这可能是你所追求的:

IJobDetail theJobToRun = JobBuilder.Create<NoOpJob>().Build();
var trigger = TriggerBuilder.Create()
                        .StartAt(DateBuilder.DateOf(7, 30, 0))
                        .WithSimpleSchedule(x => x
                                        .WithInterval(TimeSpan.FromMilliseconds(1))
                                        .WithRepeatCount(999))
                        .ForJob(theJobToRun)
                        .Build();

正如 sgmoore 所指出的,您可能无法获得毫秒精度,因为您的线程池将被作业饱和,这完全取决于它们的真实工作量。 Quartz.NET 基础架构也将花时间监视触发时间和实例化作业。

【讨论】:

  • 不应该是 .WithRepeatCount(999) 吗?
  • 解决了。感谢 Marko Lahma @sgmoore,你有权 999 处决一千次。也谢谢你!
  • 不知道Quartz的老版本是否支持,但是新版本的(quartz-scheduler.org/api/2.3.1-SNAPSHOT/index.html) DateBuilder.DateOf api: 获取一个代表给定时间的Date对象,在今天日期(相当于 todayAt(int, int, int))。因此,仅针对今天运行,而不是每天运行。所以错了!
最近更新 更多