Hanfire пропускает первую работу - PullRequest
0 голосов
/ 23 января 2020

Так что я использую задания по расписанию Hangfire, которые рассылают напоминания пользователям. Всякий раз, когда я устанавливаю задание на работу каждый понедельник, например, в 14:00. Если я сделаю это утром, скажу в 09:00. Первое выполнение должно go выключиться в 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. В любом случае, я с радостью найду работу.

Спасибо

1 Ответ

1 голос
/ 23 января 2020

Возможно, есть проблема с часовым поясом, а ваша пара hour:minute немного в прошлом. Я только что создал повторяющееся задание с ручными параметрами Cron.Weekly(), и на панели инструментов указано, что оно будет выполнено через два часа (как и ожидалось).

Возможно, вам следует навести курсор на строку In 7 days на приборной панели, тогда вы увидите точное время. Проверьте, подходит ли вам ожидаемое время, и проверьте с помощью отладчика, что входит в свойство StartTime в вашем объекте напоминания.

Если все это не поможет, мое последнее спасение также добавит обычный работу по телефону jobClient.Enqueue() с нужным временем.

...