我正在创建一个应用程序,其中有多个阶段 - 在第一阶段,有多个任务要并行执行...一旦该阶段的所有任务完成,只有处理才能进入下一阶段.
从我读到的关于决策者的内容来看,决策者可以从下一阶段的众多可能选项中选择一种.
但是,只有当前阶段的所有并行流程都完成时,我才想进入下一阶段.
这是否意味着我应该设置每个并行进程来调用下一个阶段,并且当下一个阶段初始化时,它应该检查前一阶段的所有并行进程是否完成,然后才真正开始处理?这意味着第一阶段的所有并行进程都将调用对应.第二阶段的并行过程,其中只有一个实际上会进行处理(因为这将是发现前一阶段的所有过程都已完成的过程).
有没有更好的方法来实现这个?那么下一阶段的过程只被召唤一次?
这可以使用流框架中的活动返回的Promise对象来解决.
在你的decider代码中,有一个stage1函数,它将并行执行多个活动,每个活动返回一个Promise对象.在a中添加所有这些promise对象,List<Promise<>>并将此List传递给处理阶段2的异步方法.
这是一个示例决策代码.stage1()并行执行三个活动并调用异步方法stage2(@Wait List<Promise<Void>> promiseList).除非promiseList中的所有promise都得到满足,即除非stage1中的所有三个活动都已完成,否则不会启动stage2.
private void stage1() {
List<Promise<Void>> promiseList = new ArrayList<Promise<Void>>();
Promise<Void> promise1 = activityClient.activity1();
Promise<Void> promise2 = activityClient.activity2();
Promise<Void> promise3 = activityClient.activity3();
promiseList.add(promise1);
promiseList.add(promise2);
promiseList.add(promise3);
stage2(promiseList);
}
@Asynchronous
private void stage2(@Wait List<Promise<Void>> promiseList) {
activityClient.activity4();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |