0

我想要一个循环,在每次迭代后等待一段时间。我正在尝试使用计时器进行等待,但计时器永远不会返回,所以下面的代码只运行一次,然后永远等待。当我删除计时器条件时,代码成功执行。没有错误,它只是等待......

任何帮助表示赞赏!

@override
public void doWorkflow() {
    validate("test", 1);
}

@Asynchronous
private void validate(String id, int retries, Promise<?>... waitFor) {
    Promise<Boolean> isValid = activityClient.validate(id);

    doWork(id, retries, isValid);
}

@Asynchronous
private void doWork(String id, int retries, Promise<Boolean> isValid) {
    if (!isValid.get()) {
        return;
    }

    Promise<Void> waitFor = decisionContext.getWorkflowClock().createTimer(5);

    validate(id, retries - 1, waitFor);
}
4

2 回答 2

2

我正在使用 Spring 来设置应用程序。为了获得我正在使用的决策上下文

@Autowired
DecisionContext decisionContext

问题是在构建工作流实现时我没有使用范围。解决方案是添加 scope="workflow" 属性:

<bean id="myWorkflow" class="com.example.myWorkflowImpl" scope="workflow">

完成此操作后,工作流历史记录开始显示 TimerStarted 事件。

于 2014-07-29T04:58:03.380 回答
0

我没有看到您的代码有任何明显的问题。首先,我将查看工作流历史记录(通过控制台或使用WorkflowExecutionHistoryPrinter打印)以查看是否已安排计时器以及是否触发了计时器。如果历史看起来不错,我将使用WorkflowExecutionFlowThreadDumper获得“异步线程转储”,以查看您的代码究竟在等待什么。

于 2014-07-29T01:21:40.793 回答