如何有条件地将批处理作业排入队列

时间:2017-06-13 16:20:33

标签: c# hangfire

我正在使用Hangfire Pro中的批处理作业将一个单一的类分解成更多可重入的作业。

我希望根据我的数据检查结果对Hangfire中的不同作业进行排队(例如,如果它成功则继续操作数据,如果失败则向用户发送一些信息并将状态更新为失败)。

我的代码目前看起来像这样:

//previous batch jobs running here
var parameters = GetParameters();
var importJob = BatchJob.AwaitBatch(previousJob, j =>
{
   j.Enqueue<ImportJob>(job => job.LoadData(parameters));
});
BatchJob.AwaitBatch(importJob, stuff =>
{
   stuff.Enqueue<OtherStuffJob>(job => job.DoTheOtherStuff(parameters));
});

我想把它分解成某种形式:

//previous batch jobs running here
var parameters = GetParameters();
var importJob = BatchJob.AwaitBatch(previousJob, j =>
{
   j.Enqueue<ImportJob>(job => job.LoadData(parameters));
});
BatchJob.AwaitBatch(importJob, stuff =>
{
   var dataIsGood = Checker.DoDataCheck(parameters);
   if (dataIsGood)
   {
      stuff.Enqueue<OtherStuffJob>(job => job.DoTheOtherStuff(parameters));
   }
   else
   {
      stuff.Enqueue<RejectFileJob>(job => job.HandleRejection(parameters));
   }
});

我看了this question,但他们的问题在于确保多条入口路径没有重复的作业。

我很难找到关于在运行时是否会评估dataIsGood的文档,或者在调用批处理时是否所有作业都会排队。

是否有人能够告诉我哪些会发生?

修改

事实证明这部分:

var dataIsGood = Checker.DoDataCheck(parameters); if (dataIsGood)

在前一批作业仍在运行时进行评估,这意味着检查程序所需的信息不可用。

理论上我可以通过将逻辑向下移动到作业本身来解决问题,但这意味着:

  • 根据检查结果打破将排队的工作的逻辑流程。 OR
  • 从作业类中调用批处理作业(这似乎是错误的)。

两个邪恶中哪一个较小,或者任何人都可以看到另一种方法?

0 个答案:

没有答案