【问题标题】:Schedule jobs schedules in specific milliseconds在特定毫秒内安排作业计划
【发布时间】:2021-01-14 06:19:57
【问题描述】:

如何在特定毫秒内完成工作? 我想在 02:00:00.200.200、02:00:00.400、02:00:00.600 和 ... 工作。这在 C# 中可能吗? 工作可能需要更长的时间。他们能按时完成吗?比如后台运行?

【问题讨论】:

  • 它是一个 DateTime 对象。 new DateTime(年、月、日、时、分、秒、毫秒)
  • 你能告诉我们你已经拥有或计划做什么吗?在处理这种性质的事情时,人们会写下他们想要如何完成任务。听起来您想在后台运行一些东西,但时间太短以至于任务可能没有意义。通常在使用后台任务调度程序时,持续时间会扩展到分钟、小时和天。听起来您几乎需要一项服务。
  • 我想做这个@KevinBBurns
  • 我使用了石英,但它没有 withIntervalInMilliseconds 方法@jdweng​​span>

标签: c# scheduled-tasks


【解决方案1】:

@jdweng 我使用以下代码,但工作没有在 200、400、600 等毫秒内完成。时间表也从 2:0:0.500 开始

StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();

await scheduler.Start();
IJobDetail job = JobBuilder.Create<HelloJob>()
    .WithIdentity("job1", "group1")
    .Build();
ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartAt(DateBuilder.DateOf(2, 0, 0))
    .WithSimpleSchedule(x => x
                        .WithInterval(TimeSpan.FromMilliseconds(200))
                        .WithRepeatCount(5))
    .Build();

await scheduler.ScheduleJob(job, trigger);

await Task.Delay(TimeSpan.FromSeconds(60));

await scheduler.Shutdown();

【讨论】:

  • 你在做任何类型的日志记录吗?你怎么知道它没有解雇这份工作?好的看起来不错,理论上应该没有问题。
  • 是的。作业不在我喜欢的时间运行。比如我想在 2:0:0.200 和 2:0:0.400 等时间完成,但是所有工作都在 2:0:0,900 完成(例如)@KevinBBurns
【解决方案2】:

您可以尝试通过 winmm.dll timeBeginPeriod 函数调用来提高计时器的准确性

查看此链接how to set timer resolution from C# to 1 ms? 了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多