首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amazon simple workflow-并行处理任务,并仅在前一阶段的所有并行进程完成后才进入下一阶段

amazon simple workflow-并行处理任务,并仅在前一阶段的所有并行进程完成后才进入下一阶段
EN

Stack Overflow用户
提问于 2012-06-09 00:45:47
回答 1查看 2.3K关注 0票数 1

我正在努力创建一个有多个阶段的应用程序-在第一个阶段有多个任务在parallel...once中执行所有阶段的任务都已经完成,只有然后处理应该进入下一个阶段。

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

但我只想在当前阶段的所有并行进程都完成后才进入下一阶段。

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

有没有更好的方法来实现这个功能?以便下一阶段的进程只调用一次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

代码语言:javascript
复制
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();
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10952888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档