目前我有一个使用fork / join机制创建并行流的子进程。以免假设有两种流程: A,B 。每个流程都将复杂对象 CONTEXT 作为输入变量。此外,每个流程都会进行一些计算并更新 CONTEXT 。作为输出,每个流返回更新的 CONTEXT 。这里的问题是,在加入点, CONTEXT 的最后结果会覆盖前一个结果。让我们假设流量 A 填充首先结果 CONTEXT_1 ,流量 B 将返回 CONTEXT_2 。因此,最终结果将是 CONTEXT_2 ,并且流 A 的所有更改都将丢失。
更新 根据我的观察,从SuperProcess到SubProcess的传递变量(CONTEXT)被复制(CONTEXT'),在subProcess完成后,传递变量(CONTEXT')的新值将取代原始变量(CONTEXT)。
在下面的示例中,我的意思是所有传递的变量都具有相同的名称。
示例:
SubProcess P2 (变量: CONTEXT')创建两个并行流(任务) A , B (变量通过副本传递);
A 任务(变量: CONTEXT_1 )更新变量值,完成执行并返回变量;
3.1。 CONTEXT_1 代替变量 CONTEXT',因此 P2 只能看到此新值,因为此变量的名称相同;
同时 B 任务(变量: CONTEXT_2 )仍在工作,经过一段时间更新变量后,完成执行并返回变量;
4.1。 CONTEXT_2 代替变量 CONTEXT_1 ,因此 P2 只能看到此新值,因为此变量的名称相同;
我的目标场景:
SubProcess P2 (变量: CONTEXT')创建两个并行流(任务) A , B (变量通过副本传递);
A 任务(变量: CONTEXT_1 )更新变量值,完成执行并返回变量;
3.1。 CONTEXT_1 和 CONTEXT 合并到 CONTEXT_M1 ,换句话说,只有 CONTEXT_1 的新更改才会应用于 CONTEXT
同时 B 任务(变量: CONTEXT_2 )仍在工作,经过一段时间更新变量后,完成执行并返回变量;
4.1。 CONTEXT_2 和 CONTEXT_M1 合并到 CONTEXT_M2 ,换句话说,只有 CONTEXT_2 的新更改才会应用于< strong> CONTEXT_M1 所以之前的更新不会丢失;
答案 0 :(得分:3)
经过几天的调查,我们发现将变量从SuperProcess复制到SubProcess是默认行为(link):
&#34;您可以将流程变量传递给子流程,反之亦然。该 数据在启动和复制时复制到子进程中 结束时进入主要过程。&#34;
答案 1 :(得分:1)
当你说合并?你到底是什么意思? 在涌现点你期望的行为是什么?
如果你想维护两个上下文然后使用一个以执行ID为关键字的地图,不过,我怀疑这是你想要的。
格雷格