1

我正在努力创建一个应用程序,其中有多个阶段 - 在第一阶段有多个任务要并行执行......一旦该阶段的所有任务都已完成,只有这样处理才能进入下一阶段。

从我读到的关于决策者的内容中,决策者可以从下一阶段的许多可能选项中进行选择。

但是只有当当前阶段的所有并行进程都完成时,我才想进入下一个阶段。

这是否意味着我应该设置每个并行进程来调用下一个阶段,并且在下一个阶段初始化时,它应该检查上一个阶段的所有并行进程是否完成,然后才真正开始处理?这意味着第一阶段的所有并行进程都将调用corresp。第二阶段的并行进程,其中只有一个将实际进行处理(因为这将是发现前一阶段的所有进程都完成的进程)。

有没有更好的方法来实现这一点?这样下一个阶段的过程只被调用一次?

4

1 回答 1

5

这可以使用流框架中的活动返回的 Promise 对象来解决。

在您的决策程序代码中,为 stage1 提供一个函数,该函数将并行执行多个活动,每个活动都返回一个 Promise 对象。将所有这些 Promise 对象添加到 a 中List<Promise<>>,并将此 List 传递给处理阶段 2 的异步方法。

这是一个示例决策程序代码。stage1()并行执行三个活动并调用异步方法stage2(@Wait List<Promise<Void>> promiseList)。除非promiseList 中的所有promise 都满足,否则stage2 不会启动,即除非stage1 中的所有三个活动都已完成。

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();
}
于 2012-06-22T17:15:09.140 回答