在 ASP.NET MVC 操作方法内部调用时,Hangfire 作业未触发

Hangfire job not firing when called inside of ASP.NET MVC Action method

当将 hangfire 作业放入 MVC 中的 Index 方法中时,它不会启动。我不明白为什么。

[HttpGet]
public IActionResult Index()
{
     RecurringJob.AddOrUpdate(() => GetCurrentUserNotifications(User.Identity.Name), Cron.MinuteInterval(1));

      return View(vm);
}

public void GetCurrentUserNotifications(string userId)
{

    _connectionManager.GetHubContext<NotificationsHub>()
        .Clients.All.broadcastNotifications(_repository.GetNotifications()
        .Where(x => x.DateTime <= DateTime.Now && x.CreatedBy == userId));
}

问题是你的方法 GetCurrentUserNotifications(string userId) 是你的控制器的方法 class。当 Hangfire 执行作业时,它会尝试创建控制器实例 class。但我相信您的控制器 class 没有无参数构造函数。因此它将无法执行该作业。 解决方案是创建一个单独的 class,例如 BackgroundProcess。将你的 GetCurrentUserNotifications 放入其中,然后像下面这样调用:

RecurringJob.AddOrUpdate(() => new BackgroundProcess().GetCurrentUserNotifications(User.Identity.Name), Cron.MinuteInterval(1));