我正在尝试使用不同的启动参数启动子工作流程的两个并行执行。但是,我注意到这些子工作流程执行中只有一个运行。父工作流程的执行由于未计划的任务而暂停,导致执行历史记录中的所有活动直到超时都没有。不会引发任何异常或错误,它只会停止执行任何操作。有趣的是,总是第二个子工作流程执行完成。

如果父级仅运行子级工作流程的一次执行,则子级将成功完成,并且父级工作流程将继续完成。我怀疑这与同时运行子工作流程的多个副本有关,并且由于它们轮询相同的任务列表而相互干扰。我只是不知道我应该如何解决这个问题。

码:

ProcessRunnerClient childWorkflowClient = factory.getClient();
List<Promise<T>> childWorkflowsDone = new ArrayList<Promise<T>>;
switch(condition){
case 1:
    childWorkflowsDone.add(childWorkflowClient.method(case1Params));
// Works fine
    break;
case 2:
    childWorkflowsDone.add(childWorkflowClient.method(case2Params));
// Works fine
    break;
case 3:
    childWorkflowsDone.add(childWorkflowClient.method(case1Params));
    childWorkflowsDone.add(childWorkflowClient.method(case2Params));
// The execution of the child workflow with case2Params completes,
// and parent execution suspends
    break;
default:
    throw new WorkflowException("Condition " + condition + " not supported");
}

最佳答案

确保每个子工作流程都使用其自己的生成客户端实例启动。因此,将您的示例更改为:

List<Promise<T>> childWorkflowsDone = new ArrayList<Promise<T>>;
ProcessRunnerClient childWorkflowClient1 = factory.getClient()
childWorkflowsDone1.add(childWorkflowClient.method(params1));
ProcessRunnerClient childWorkflowClient2 = factory.getClient()
childWorkflowsDone.add(childWorkflowClient2.method(params2));


启动它是为了支持与子工作流程之间的通信。例如,同一客户端可用于发送信号或检索runId。

08-04 05:45