class WhenCondition extends Condition {

	private final LFLog LOG = LFLoggerManager.getLogger(this.getClass());

	// 只在when类型下有效，以区分当when调用链调用失败时是否继续往下执行 默认false不继续执行
	private boolean ignoreError = false;

	// 只在when类型下有效，用于不同node进行同组合并，相同的组会进行合并，不同的组不会进行合并
	// 此属性已弃用
	private String group = LocalDefaultFlowConstant.DEFAULT;

	// 当前 When 对应并行策略，默认为 ALL
	private ParallelStrategyEnum parallelStrategy;

	// 只有 must 条件下，才会赋值 specifyIdSet
	private Set<String> specifyIdSet;

	// when单独的线程池名称
	private String threadExecutorClass;

	// 异步线程最⻓的等待时间
	private Integer maxWaitTime;

	// 等待时间单位
	private TimeUnit maxWaitTimeUnit;

	@Override
	public void executeCondition(Integer slotIndex) throws Exception {
		executeAsyncCondition(slotIndex);
	}

	@Override
	public ConditionTypeEnum getConditionType() {
		return ConditionTypeEnum.TYPE_WHEN;
	}

	// 使用线程池执行 when 并发流程
	// 这块涉及到挺多的多线程逻辑，所以注释比较详细，看到这里的童鞋可以仔细阅读
	private void executeAsyncCondition(Integer slotIndex) throws Exception {<FILL_FUNCTION_BODY>}

	public boolean isIgnoreError() {
		return ignoreError;
	}

	public void setIgnoreError(boolean ignoreError) {
		this.ignoreError = ignoreError;
	}

	public String getGroup() {
		return group;
	}

	public void setGroup(String group) {
		this.group = group;
	}

	public ParallelStrategyEnum getParallelStrategy() {
		return parallelStrategy;
	}

	public void setParallelStrategy(ParallelStrategyEnum parallelStrategy) {
		this.parallelStrategy = parallelStrategy;
	}

	public Set<String> getSpecifyIdSet() {
		return specifyIdSet;
	}

	public void setSpecifyIdSet(Set<String> specifyIdSet) {
		this.specifyIdSet = specifyIdSet;
	}

	public String getThreadExecutorClass() {
		return threadExecutorClass;
	}

	public void setThreadExecutorClass(String threadExecutorClass) {
		// #I7G6BB 初始化的时候即创建线程池，避免运行时获取导致并发问题
		ExecutorHelper.loadInstance().buildWhenExecutor(threadExecutorClass);
		this.threadExecutorClass = threadExecutorClass;
	}

	public Integer getMaxWaitTime() {
		return maxWaitTime;
	}

	public void setMaxWaitTime(Integer maxWaitTime) {
		this.maxWaitTime = maxWaitTime;
	}

	public TimeUnit getMaxWaitTimeUnit() {
		return maxWaitTimeUnit;
	}

	public void setMaxWaitTimeUnit(TimeUnit maxWaitTimeUnit) {
		this.maxWaitTimeUnit = maxWaitTimeUnit;
	}
}


		// 获取并发执行策略
		ParallelStrategyExecutor parallelStrategyExecutor = ParallelStrategyHelper.loadInstance().buildParallelExecutor(this.getParallelStrategy());

		// 执行并发逻辑
		parallelStrategyExecutor.execute(this, slotIndex);

	
<methods>public non-sealed void <init>() ,public void addExecutable(com.yomahub.liteflow.flow.element.Executable) ,public void addExecutable(java.lang.String, com.yomahub.liteflow.flow.element.Executable) ,public void execute(java.lang.Integer) throws java.lang.Exception,public abstract void executeCondition(java.lang.Integer) throws java.lang.Exception,public List<com.yomahub.liteflow.flow.element.Node> getAllNodeInCondition() ,public abstract com.yomahub.liteflow.enums.ConditionTypeEnum getConditionType() ,public java.lang.String getCurrChainId() ,public java.lang.String getCurrChainName() ,public Map<java.lang.String,List<com.yomahub.liteflow.flow.element.Executable>> getExecutableGroup() ,public List<com.yomahub.liteflow.flow.element.Executable> getExecutableList() ,public List<com.yomahub.liteflow.flow.element.Executable> getExecutableList(java.lang.String) ,public com.yomahub.liteflow.flow.element.Executable getExecutableOne(java.lang.String) ,public com.yomahub.liteflow.enums.ExecuteableTypeEnum getExecuteType() ,public java.lang.String getId() ,public java.lang.String getTag() ,public void setCurrChainId(java.lang.String) ,public void setExecutableList(List<com.yomahub.liteflow.flow.element.Executable>) ,public void setId(java.lang.String) ,public void setTag(java.lang.String) <variables>private java.lang.String currChainId,private final Map<java.lang.String,List<com.yomahub.liteflow.flow.element.Executable>> executableGroup,private java.lang.String id,private java.lang.String tag