【发布时间】: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