private void acquireFutureResult()

in core/src/main/java/com/alibaba/smart/framework/engine/configuration/impl/DefaultParallelServiceOrchestration.java [134:160]


    private void acquireFutureResult(ExecutionContext context, ProcessEngineConfiguration processEngineConfiguration, Long latchWaitTime, boolean isSkipTimeoutExp, List<Future<ExecutionContext>> futureExecutionResultList) throws TimeoutException {
        //注意这里的逻辑:这里假设是子线程在执行某个fork分支的逻辑后,然后会在join节点时返回。这个join节点就是 futureJoinParallelGateWay。
        // 当await 执行结束后,这里的假设不变式:所有子线程都已经到达了join节点。
        ExceptionProcessor exceptionProcessor = processEngineConfiguration.getExceptionProcessor();

        for (Future<ExecutionContext> pvmActivityFuture : futureExecutionResultList) {
            try {
                if (hasValidLatchWaitTime(latchWaitTime)) {
                    pvmActivityFuture.get(latchWaitTime, TimeUnit.MILLISECONDS);
                } else {
                    pvmActivityFuture.get();
                }
            } catch (InterruptedException e) {
                exceptionProcessor.process(e, context);
            } catch (ExecutionException e) {
                exceptionProcessor.process(e, context);
            } catch (CancellationException e) {
                // 忽略超时异常
                if (isSkipTimeoutExp) {
                    // 跳过超时异常,只记录log
                    log.warn("parallel gateway occur timeout, skip exception!", e);
                } else {
                    throw e;
                }
            }
        }
    }