如何使用Hangfire Pro批量调度树形依赖任务?
使用Hangfire Pro实现依赖型批量任务调度
Hangfire Pro的Batch API完全支持你描述的树形依赖任务调度场景,专业版许可证覆盖该功能,可以精准控制任务的执行顺序与依赖关系。
核心实现示例
假设你已经定义了Task1()至Task12()这12个计算任务方法,以下是基于Hangfire Pro API的调度代码:
using Hangfire; using Hangfire.Pro; using Hangfire.Pro.Batch; // 启动批量任务组 var batchId = BatchJob.StartNew(batch => { // 1. 调度无依赖的初始任务1-6,并行执行 var job1 = batch.Enqueue(() => Task1()); var job2 = batch.Enqueue(() => Task2()); var job3 = batch.Enqueue(() => Task3()); var job4 = batch.Enqueue(() => Task4()); var job5 = batch.Enqueue(() => Task5()); var job6 = batch.Enqueue(() => Task6()); // 2. 任务7等待1、2、3全部完成后执行 var job7 = batch.ContinueWith(new[] { job1, job2, job3 }, () => Task7()); // 3. 任务8等待4完成后执行 var job8 = batch.ContinueWith(job4, () => Task8()); // 4. 任务9等待5、6全部完成后执行 var job9 = batch.ContinueWith(new[] { job5, job6 }, () => Task9()); // 5. 任务10等待7、8、9全部完成后执行 var job10 = batch.ContinueWith(new[] { job7, job8, job9 }, () => Task10()); // 6. 链式依赖:任务11等10完成,任务12等11完成 var job11 = batch.ContinueWith(job10, () => Task11()); batch.ContinueWith(job11, () => Task12()); });
关键API说明
BatchJob.StartNew: 创建一个批量任务容器,所有相关任务都在该容器内管理,支持统一监控、取消等操作。batch.Enqueue: 添加无依赖的任务,这些任务会立即进入队列并行执行。batch.ContinueWith: 指定后续任务的依赖条件,可传入单个或多个前置任务ID,只有所有依赖任务执行完成后,后续任务才会被调度。
任务输出传递(可选)
如果需要将前置任务的输出作为后续任务的输入,可以通过JobContinuation.GetResult<T>获取前置任务的返回值,示例如下:
// 示例:Task1返回计算结果,Task7接收该结果 public int Task1() => /* 计算逻辑,返回结果 */; public void Task7(int task1Result, int task2Result, int task3Result) => /* 使用结果计算 */; // 在批量任务中传递参数 var job1 = batch.Enqueue(() => Task1()); var job2 = batch.Enqueue(() => Task2()); var job3 = batch.Enqueue(() => Task3()); var job7 = batch.ContinueWith( new[] { job1, job2, job3 }, () => Task7( JobContinuation.GetResult<int>(job1), JobContinuation.GetResult<int>(job2), JobContinuation.GetResult<int>(job3) ) );
许可证支持确认
Hangfire Pro的专业版许可证完全包含Batch API的所有功能,包括这种复杂的依赖调度、批量任务管理、结果传递等场景,符合你的需求。
内容的提问来源于stack exchange,提问作者herme 0
相关产品推荐
相关产品推荐

