我正在使用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)
在前一批作业仍在运行时进行评估,这意味着检查程序所需的信息不可用。
理论上我可以通过将逻辑向下移动到作业本身来解决问题,但这意味着:
两个邪恶中哪一个较小,或者任何人都可以看到另一种方法?