【问题标题】:run a recurring background job using hangfire every 28Days每 28 天使用 hangfire 运行重复的后台作业
【发布时间】:2018-08-23 22:39:51
【问题描述】:

无论如何,请知道如何将循环后台作业设置为每 28 天运行一次。也就是说,该作业应基于 28 天而不是每月的 28 天运行。这是我目前的实现。

   string CropExpression = "0 20 */28  * * ";
   RecurringJob.AddOrUpdate(() => _chargesJob.ChargeCustomerAccountMonthly(account.Id),CropExpression); 

当前的实现在每个月的 28 日运行该作业,这对我的应用来说并不理想。我想要实现的是应该根据当前日期时间计算 28 天。 例如,如果 Datetime.now =2018/3/15,则循环作业应从该日期开始计数,并持续到下个月,直到达到 28 天。

【问题讨论】:

  • .... 然后有一个计数器...一旦达到 28 它会重置.. 这样它就不会关心今天是什么日子了。
  • @Seabizkit 请给我看个样本
  • @user2943374 这个表达式有什么问题?该 cron 表达式表示 run every 28 days at 20:00。它应该已经按照您的要求进行。如果您想在 28 日运行,则应删除斜线,例如 0 20 28 * *
  • @user2943374 你怎么知道这个表达式不起作用?如果您在 2018 年 2 月开始这项工作,它将在 2018 年 3 月的同一天运行,因为 2 月有 28 天。您是否尝试过不同的间隔,例如每 1 分钟、1 小时或 1 天?

标签: asp.net hangfire


【解决方案1】:

您可以简单地设置延迟 28 天的作业。然后,当该作业执行时,设置 另一个 作业延迟 28 天。

更多详情请见http://docs.hangfire.io/en/latest/background-methods/calling-methods-with-delay.html

但基本思路是:

public void Schedule()
{
    BackgroundJob.Schedule(
        () => {
           DoYourActualWork();
           Schedule();
        },
    TimeSpan.FromDays(28));
}

【讨论】:

    【解决方案2】:

    你可以使用这样的东西

    RecurringJob.AddOrUpdate("Charge customer monthly", 
        () => _chargesJob.ChargeCustomerAccountMonthly(account.Id), 
        Cron.DayInterval(28));
    

    【讨论】:

    • Somehting 告诉我Cron.DayInterval(28) 也会产生*/28重复间隔的正确语法
    • @PanagiotisKanavos 输出是一样的。我想要实现的是,例如 Datetime.now = 2018 年 3 月 20 日。28Days 应该从该日期开始计算,而不是从该月的第 28 天开始计算。
    • @user2943374,正确的语法是使用*/28,正是你使用的。你怎么知道 Hangfire 没有按它应该的方式工作?请记住,2018 年 2 月有 28 天。如果您在 2018 年 2 月开始这项工作,它将在 2018 年 3 月的同一天运行
    • @PanagiotisKanavos 因为当我在 hangfire 中检查作业的下一个执行日期时,它将在同月 28 日触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多