我正在创建一个应用程序,其中有多个阶段 - 在第一阶段中有多个任务要并行执行...一旦该阶段的所有任务完成,只有处理才能进入下一个阶段阶段。
从我读到的关于决策者的内容来看,决策者可以从下一阶段的众多可能选项中选择一种。
但是,只有当前阶段的所有并行流程都已完成时,我才想进入下一阶段。
这是否意味着我应该设置每个并行进程来调用下一个阶段,并且当下一个阶段初始化时,它应该检查前一阶段的所有并行进程是否完成,然后才真正开始处理?这意味着第一阶段的所有并行进程都将调用对应。第二阶段的并行流程,其中只有一个实际上会进行处理(因为这将是发现前一阶段的所有流程都已完成的流程)。
有更好的方法来实现吗?那么下一阶段的过程只被召唤一次?
答案 0 :(得分:5)
这可以使用flow framework中的活动返回的Promise对象来解决。
在你的决策代码中,有一个stage1函数,它将并行执行多个活动,每个活动返回一个Promise对象。在List<Promise<>>
中添加所有这些promise对象,并将此List传递给处理第2阶段的异步方法。
这是一个示例决策代码。 stage1()
并行执行三个活动并调用异步方法stage2(@Wait List<Promise<Void>> promiseList)
。除非promiseList中的所有承诺都得到满足,即除非第1阶段的所有三项活动都已完成,否则不会启动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();
}