⏱️超时控制
LiteFlow 从 2.11.0 开始,支持使用关键字对流程进行超时控制。
# 使用方法
使用 maxWaitSeconds
,maxWaitMilliseconds
关键字可对任意的组件、表达式、流程进行超时控制。
maxWaitSeconds
后面传的是秒数,maxWaitMilliseconds
后面传的是毫秒数。使用方式都一样。
maxWaitSeconds
和maxWaitMilliseconds
传入一个 int 类型的整数表示最大等待秒数/毫秒数,使用如下方法设置最大超时等待时间。
<flow>
<!-- 串行编排超时控制 -->
<chain name="then">
THEN(a,b).maxWaitSeconds(5);
</chain>
<!-- 并行编排超时控制 -->
<chain name="when">
WHEN(a,b).maxWaitSeconds(3);
</chain>
<!-- 循环编排超时控制 -->
<chain name="for">
FOR(2).DO(a).maxWaitSeconds(3);
</chain>
<chain name="while">
WHILE(w).DO(a).maxWaitSeconds(3);
</chain>
<chain name="iterator">
ITERATOR(x).DO(a).maxWaitSeconds(3);
</chain>
<!-- 选择编排超时控制 -->
<chain name="switch">
SWITCH(s).TO(a, b).maxWaitSeconds(3);
</chain>
<!-- 条件编排超时控制 -->
<chain name="if">
IF(f, b, c).maxWaitSeconds(3);
</chain>
<!-- 组件超时控制 -->
<chain name="component">
WHEN(
a.maxWaitSeconds(2),
b.maxWaitSeconds(3)
);
</chain>
<!-- 流程超时控制 -->
<chain name="testChain">
THEN(b)
</chain>
<chain name="chain">
testChain.maxWaitSeconds(3);
</chain>
</flow>
# 注意事项
FINALLY
不可使用此关键字。这种写法是不被允许的:
THEN(a, FINALLY(b).maxWaitSeconds(3))
如果
THEN
使用了超时控制,其内部直属的FINALLY
不受超时控制。例如:
THEN(a, FINALLY(b)).maxWaitSeconds(5);
组件 b 是不受超时控制的。但如果
FINALLY
不是设置超时的THEN
所直属的,则仍受超时控制。例如:
THEN(a, THEN(b, FINALLY(c))).maxWaitSeconds(5);
c 仍会受超时控制。
除
WHEN
外,若某个关键字后续存在多个连续操作,则maxWaitSeconds
必须放在完整语义的最后。。例如:
FOR(5).DO(THEN(e, f)).maxWaitSeconds(5);
不可写为:
FOR(5).maxWaitSeconds(5).DO(THEN(e, f));
必须得到完整语义后再设置超时。但使用
WHEN
关键字时可以不放在最后,以下写法是被允许的:WHEN(a, b).maxWaitSeconds(5).any(true);
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17