1
私たちはいくつかのシステムでHangfireを使用していましたが、Hangfireバッチ機能を使用して並行してタスクを実行しましたが、それは逐次的な仕事である。Hangfireネストされたバッチでエラーが発生する
BatchJob.Attach(masterBatch, batch =>
{
var lockJobId = batch.Enqueue<IProcessJob>(job => job.ObtainLock(businessUnit));
var preparationJobId = batch.ContinueWith<IPrepareProcessJob>(lockJobId,
job => job.PrepareData(businessUnit, workingJobData, JobCancellationToken.Null));
var statisticsJobId = batch.ContinueWith<IPrepareProcessJob>(preparationJobId,
job => job.AddStatistics(businessUnit, workingJobData, JobCancellationToken.Null));
var processFileId = batch.ContinueWith<IProcessJob>(statisticsJobId,
job => job.ProcessFile(workingJobData, notifierInstructions, businessUnit,
JobCancellationToken.Null));
batch.ContinueWith<IProcessJob>(processFileId, job => job.ReleaseLock(businessUnit));
});
を私たちは常に3つの処理の仕事に起こるものは何でも、最終的なロック解除ジョブを実行したいので、私たちは中央の3つのジョブの周りに、ネストされたバッチを導入しようとしたしかし:罰金作品を以下のように単純なバッチを使用して
次のように:
BatchJob.Attach(masterBatch, batch =>
{
var lockJobId = batch.Enqueue<IProcessJob>(job => job.ObtainLock(businessUnit));
var mainBatchId = batch.AwaitJob(lockJobId, mainBatch =>
{
var preparationJobId = mainBatch.Enqueue<IPrepareProcessJob>(
job => job.PrepareData(businessUnit, jobData, JobCancellationToken.Null));
var statisticsJobId = mainBatch.ContinueWith<IPrepareProcessJob>(preparationJobId,
job => job.AddStatistics(businessUnit, jobData, JobCancellationToken.Null));
mainBatch.ContinueWith<IProcessJob>(statisticsJobId,
job => job.ProcessFile(jobData, notifierInstructions, businessUnit,
JobCancellationToken.Null));
});
batch.AwaitBatch<IProcessJob>(mainBatchId, job => job.ReleaseLock(businessUnit));
});
これはエラーを生成します。
Can't create a continuation for batch 'a5955434-294e-4568-9b64-c167feeb95da' because it doesn't exist.
Hangfireが最終リリースロックを添付しようとすると、エラーが発生しているかどうか調査中です。誰かが私たちが間違っているかもしれないことについて何か示唆を得ていますか?