【问题标题】:Recurring Job with delay time具有延迟时间的重复作业
【发布时间】:2017-04-18 07:36:31
【问题描述】:

我正在使用 Hangfire 版本“1.6.8”。我想在某些 DateTime 之后使用 Cron.Daily 创建定期工作。是否可以创建具有延迟时间的重复作业?

提前致谢

【问题讨论】:

  • 你可以使用 Cron.Daily(time.Hours, time.Minutes); - 在特定时间完成日常工作

标签: c# .net asp.net-mvc hangfire recurring


【解决方案1】:

我想不出任何特别干净的方法。

您可以探索使用 hangfire 计划作业创建 RecurringJob 的途径:

new BackgroundJobClient().Schedule(() => Hangfire.RecurringJob.AddOrUpdate(() => Console.WriteLine("Hello World"), Cron.Daily()), startDateTime)

可以设置为在循环作业的第一个预期运行时间之前不久运行计划作业,因此 hangfire 运行计划并自行创建作业。我实际上从未尝试过这样做,所以请进行测试(并让我知道它是如何进行的)。

【讨论】:

  • 我看到你已经接受了我的回答,这是否意味着这有效?进展如何?您对任何关注的人有更具体的实施细节吗?
  • 我试过了,我得到了那个异常: System.NotSupportedException: '作业方法参数不支持匿名函数、委托和 lambda 表达式:很难序列化它们及其所有范围一般。'
  • @adam.bielasty 我也有这个问题!
【解决方案2】:

HangFire docs,您可以使用CRON expressions。最初它们有点难以掌握,但是一旦你掌握了结构的窍门,你将能够做你想要的一切。请注意,这些是确切时间,并且没有“在此时间之后你什么时候喜欢它”。告诉它您希望它何时运行。

例如,如果您希望它在每天下午 2 点运行:

RecurringJob.AddOrUpdate(() => Console.Write("Powerful!"), "0 14 * * *");
  • 0: 0 分钟
  • 14:下午 2 点(14:00 小时)
  • *: 每月的每一天
  • *: 一年中的每个月
  • *:一周中的每一天。

【讨论】:

  • 认为 OP 正在寻找类似“每天下午 2 点做...x 天后开始”之类的东西。遗憾的是,这种事情没有 CRON 表达式,因此有安排元作业(在 x 天后执行)常规作业(每天下午 2 点)的想法。
【解决方案3】:

试试这个

  using (var server = new BackgroundJobServer())
  {
                BackgroundJob.Schedule(
                    () => RunJob(),
                    TimeSpan.FromSeconds(5)
                    );
  }



    public static void RunJob()
    {
       using (var server = new BackgroundJobServer())
       {
         RecurringJob.AddOrUpdate(() => Console.WriteLine("Hello World123"), "* * * * *");
                
      }
    }

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多