我正在努力创建一个有多个阶段的应用程序-在第一个阶段有多个任务在parallel...once中执行所有阶段的任务都已经完成,只有然后处理应该进入下一个阶段。
根据我所读到的关于决策者的内容,决策者可以从下一阶段的许多可能选项中进行选择。
但我只想在当前阶段的所有并行进程都完成后才进入下一阶段。
这是否意味着我应该设置每个并行进程来调用下一阶段,当下一阶段初始化时,它应该检查前一阶段的所有并行进程是否都已完成,然后才真正开始处理?这将意味着第一阶段的所有并行进程都将调用corresp。第二阶段的并行进程,其中只有一个进程将实际进行处理(因为这将是发现前一阶段的所有进程都已完成的进程)。
有没有更好的方法来实现这个功能?以便下一阶段的进程只调用一次?
发布于 2012-06-23 01:15:09
这可以使用由flow framework中的活动返回的Promise对象来解决。
在您的decider代码中,有一个用于stage1的函数,该函数将并行执行多个活动,每个活动返回一个Promise对象。将所有这些promise对象添加到List<Promise<>>中,并将此列表传递给处理阶段2的异步方法。
下面是一个示例决策器代码。stage1()并行执行三个活动,并调用异步方法stage2(@Wait List<Promise<Void>> promiseList)。除非promiseList中的所有承诺都得到满足,即除非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();
}https://stackoverflow.com/questions/10952888
复制相似问题