Hangfire:如何停止处理后台作业并在特定时间段内对其进行处理

时间:2019-03-21 18:06:18

标签: c# hangfire

我们有一种情况,我们希望作业继续在服务器中排队而不是处理。作业的处理应在特定时间段内完成,例如上午11点至下午13点。对于周期性作业,可以使用CRON表达式来完成。有什么方法可以使排队的后台作业实现相同的目的。

对于正常处理,我们将用户定义的队列排队为:

var state = new EnqueuedState(queue.Name);
_client.Create(methodCall, state);

_client的类型为IBackgroundJobClient

1 个答案:

答案 0 :(得分:1)

您可以从另一个后台作业安排一个后台作业。因此,您可以将调度决策逻辑放入正在调度的方法中。

说您有以下方法:

void DoSomethingAndScheduleAgain()
{
   // Do some work...

   bool shouldContinue = //Some condition (e.g. it is not 13 pm yet)
   if (shouldeContinue)
      BackgroundJob.Schedule(DoSomethingAndScheduleAgain), TimeSpan.FromMinutes(5));
   else
      BackgroundJob.Schedule(DoSomethingAndScheduleAgain), TimeSpan.FromHours(22)); //Wait until tomorrow
}

现在,您只是第一次安排此方法,该方法将在需要时自行进行安排。

BackgroundJob.Schedule(DoSomethingAndScheduleAgain), TimeSpan.FromMinutes(1));