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

我想根据我的数据检查结果排队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 或者在调用批处理时是否所有作业都排队的文档 .

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

EDIT

事实证明这部分:

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

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

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

  • 打破了将根据检查结果排队的作业的逻辑流程 . 要么

  • 从作业类中调用批处理作业(这似乎是错误的) .

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