HangFire循环任务数据

4

我正在编写一个MVC 5互联网应用程序,并使用HangFire进行定期任务。

如果我有一个每月重复的任务,如何获取下一次执行时间的值?

这是我的定期任务代码:

RecurringJob.AddOrUpdate("AccountMonthlyActionExtendPaymentSubscription", () => accountService.AccountMonthlyActionExtendPaymentSubscription(), Cron.Monthly);

我可以按以下方式检索作业数据:
using (var connection = JobStorage.Current.GetConnection())
{
    var recurringJob = connection.GetJobData("AccountMonthlyActionExtendPaymentSubscription");
}

然而,我不确定接下来该怎么做。

是否有可能获取循环任务的下一次执行时间?

提前感谢。

1个回答

16

你已经接近了答案。我不确定是否有更好的或者更直接的方法来获取这些细节,但是 Hangfire Dashboard 的方式是使用一个扩展方法(在导入中添加 using Hangfire.Storage;),该方法名为 GetRecurringJobs():

using (var connection = JobStorage.Current.GetConnection())
{
   var recurring = connection.GetRecurringJobs().FirstOrDefault(p => p.Id == "AccountMonthlyActionExtendPaymentSubscription");

   if (recurring == null)
   {
       // recurring job not found
       Console.WriteLine("Job has not been created yet.");
   }
   else if (!recurring.NextExecution.HasValue)
   {
       // server has not had a chance yet to schedule the job's next execution time, I think.
       Console.WriteLine("Job has not been scheduled yet. Check again later.");
   }
   else
   {
       Console.WriteLine("Job is scheduled to execute at {0}.", recurring.NextExecution);
   }
}

有两个需要注意的地方:

  1. 它会返回所有的循环任务,你需要从结果中选择适当的记录
  2. 当你首次创建一个任务时,NextExecution时间尚不可用(将为 null)。我相信一旦连接后,服务器会定期检查需要安排的重复任务,并执行此操作;它们似乎不会立即在使用RecurringJob.AddOrUpdate(...)或其他类似方法创建后被安排。如果你需要在创建后立即获取NextExecution值,我不确定该怎么做。然而,它最终会被填充。

我有一个MVC应用程序和一个控制台应用程序。在控制台应用程序中,在我的主方法中,我已配置Hangfire服务器,并有1个while循环,以便我的控制台应用程序保持运行状态。在控制台应用程序中,我有一个执行(Execute)方法,该方法进行后台处理。我想在控制台应用程序中进行后台处理,因此我已在控制台应用程序中配置了HF服务器。但是我不知道如何从MVC中将控制台应用程序的execute方法排队。 - Learning-Overthinker-Confused

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接