我想要一个循环,在每次迭代等待一段时间后。我正在尝试使用计时器来进行等待,但计时器永远不会返回,因此下面的代码只运行一次然后永远等待。当我删除计时器条件时,代码执行成功。没有错误,只是等待......
感谢任何帮助!
@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);
}
答案 0 :(得分:2)
我正在使用Spring来设置应用程序。为了获得我正在使用
的决策背景@Autowired
DecisionContext decisionContext
问题是在构建Workflow实现时我没有使用范围。解决方案是添加范围=&#34;工作流程&#34;属性:
<bean id="myWorkflow" class="com.example.myWorkflowImpl" scope="workflow">
执行此操作后,工作流历史记录开始显示TimerStarted事件。
答案 1 :(得分:0)
我没有看到您的代码有任何明显问题。首先,我将查看工作流程历史记录(通过控制台或使用WorkflowExecutionHistoryPrinter打印)以查看计时器是否已安排以及是否会触发。如果历史记录看起来没问题,我会使用WorkflowExecutionFlowThreadDumper获得“异步线程转储”以查看您的代码究竟在等待什么。