【问题标题】:Hanfire skips first job executionHanfire 跳过第一个作业执行
【发布时间】:2020-05-09 17:30:16
【问题描述】:

所以我正在使用向用户发送提醒的 Hangfire 计划作业。每当我将作业设置为每周一运行时,例如在 14:00。如果我早上这样做,请说在 09:00。第一次执行应该在 14:00 开始。问题是似乎正在发生的事情是,当我查看仪表板时,它显示下一次执行将在 7 天内完成。

代码如下:

public class ReminderTimeService : IReminderTimeService

{
            private readonly IRecurringJobManager _recurringJobClient;

            public ReminderTimeService(
                 IRecurringJobManager recurringJobClient)
            {
                _recurringJobClient = recurringJobClient;
            }                    


            public void ScheduleJobs(List<ReminderTime> reminderTimeList)
            {
                  foreach (var reminder in reminderTimeList)
                  {
                        _recurringJobClient.AddOrUpdate<IProactiveMessageService>(
                                // Job Id
                                $"send-status-set-reminder-{reminder.Day.Substring(0, 3)}- 
                                {reminder.StartTime.Split(":")[0]}-{reminder.StartTime.Split(":")[1]}",
                                // Service to run work
                                c => c.SendStatusSetReminder(),
                                // Repeat weekly
                                GetWeekCronExpression(reminder.Day, reminder.StartTime),
                                // Use local time
                                TimeZoneInfo.Local);
                  }
           private DayOfWeek GetDayOfTheWeek(string day)
           {
            switch (day)
            {
                case "Monday":
                    return DayOfWeek.Monday;

                case "Tuesday":
                    return DayOfWeek.Tuesday;

                case "Wednesday":
                    return DayOfWeek.Wednesday;

                case "Thursday":
                    return DayOfWeek.Thursday;

                case "Friday":
                    return DayOfWeek.Friday;

                default:
                    return DayOfWeek.Monday;
            }
        }

        private string GetWeekCronExpression(string day, string time)
        {
            var hour = Convert.ToInt16(time.Split(":")[0]);
            var minute = Convert.ToInt16(time.Split(":")[1]);
            var weekStartExp = Cron.Weekly(GetDayOfTheWeek(day), hour, minute);

            return weekStartExp;
        }
}



    }

我的猜测是我根本不理解某些东西,或者 Hangfire 存在错误。 无论如何,我很高兴能得到解决。

谢谢

【问题讨论】:

    标签: c# asp.net-core cron scheduled-tasks hangfire


    【解决方案1】:

    可能存在时区问题,而您的 hour:minute 对稍微过去了。我刚刚使用Cron.Weekly() 手动参数创建了一个重复作业,并且在仪表板中显示,它将在两个小时内执行(如预期的那样)。

    也许您应该将鼠标悬停在仪表板上的字符串In 7 days 上,然后您会看到准确的时间。检查是否是您的预期时间,并使用调试器检查提醒对象中 StartTime 属性中的内容。

    如果所有这些都没有帮助,那将是我最后一次救援,通过在所需时间致电 jobClient.Enqueue() 添加一份普通工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 2017-07-06
      • 2014-06-07
      • 2013-08-17
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多