C# 如何有条件地将批处理作业排队

C# 如何有条件地将批处理作业排队,c#,hangfire,C#,Hangfire,我正在使用Hangfire Pro中的批处理作业将一个单一类拆分为更多可重入作业 我想根据数据检查的结果在Hangfire中对不同的作业进行排队(例如,如果成功,则继续操作数据;如果失败,则向用户发送一些信息,并将状态更新为失败) 我的代码当前看起来像这样: //previous batch jobs running here var parameters = GetParameters(); var importJob = BatchJob.AwaitBatch(previousJob, j

我正在使用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));
});
//在此运行以前的批处理作业
var参数=GetParameters();
var importJob=BatchJob.AwaitBatch(上一个作业,j=>
{
j、 排队(job=>job.LoadData(参数));
});
BatchJob.AwaitBatch(importJob,stuff=>
{
Enqueue(job=>job.DoTheOtherStuff(参数));
});
我想把它分解成以下形式:

//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));
   }
});
//在此运行以前的批处理作业
var参数=GetParameters();
var importJob=BatchJob.AwaitBatch(上一个作业,j=>
{
j、 排队(job=>job.LoadData(参数));
});
BatchJob.AwaitBatch(importJob,stuff=>
{
var dataIsGood=Checker.DoDataCheck(参数);
如果(数据良好)
{
Enqueue(job=>job.DoTheOtherStuff(参数));
}
其他的
{
stuff.Enqueue(job=>job.HandleRejection(参数));
}
});
我看了一眼,但他们的问题在于确保没有来自多个入口通道的重复工作

我正在努力寻找文档,说明是在运行时对
dataIsGood
进行评估,还是在调用批处理时所有作业都将排队

有人能告诉我会发生什么吗

编辑

因此,这一部分:

var-dataIsGood=Checker.DoDataCheck(参数);
如果(数据良好)

在以前的批处理作业仍在运行时进行计算,这意味着检查器所需的信息对其不可用

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

  • 根据检查结果,中断哪些作业将排队的逻辑流。 或
  • 从作业类内部调用批处理作业(这似乎是错误的)

两害孰轻孰轻,或者有人能找到解决这一问题的替代方法吗?

基本上,您正在尝试做的事情应该可以很好地工作(如代码所示),因为我看不出有任何错误。不过我还没有试过。您是否有机会亲自尝试并查看??您必须能够调试此代码并检查执行情况,或者您可以查询Hangfire.Jobs表以查看添加/运行/完成了哪些作业