在我的程序中,我调用了一个可以返回值或“”的方法,基本上我希望它重试查找值 3 次,每次尝试之间延迟 1 秒,直到它获得一个值或尝试完成。
这就是我目前拥有的,但我觉得这个解决方案非常糟糕,尤其是必须将 try/catch 放在睡眠中。有谁知道延迟重试的更好方法?
public void method(String input){
String value = getValue(input);
int tries = 0
while (value.equals("") && tries < 3){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
log.error("Thread interrupted");
}
value = getValue(input);
tries += 1;
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
归根结底,您无法回避需要捕获异常的事实
你可以做的就是通过放入你自己的方法来隐藏它
public static void mySleep (int val) {
try {
TimeUnit.SECONDS.sleep(val);
} catch (InterruptedException e) {
log.error("Thread interrupted");
}
}
Run Code Online (Sandbox Code Playgroud)
所以你的main功能变得更干净
while (value.equals("") && tries < 3){
mySleep (1);
value = getValue(input);
tries += 1;
}
Run Code Online (Sandbox Code Playgroud)
Awaitility.with()
.pollInterval(1, SECONDS)
.atMost(3, SECONDS)
.await()
.until(() -> ("" != getValue(input)));
Run Code Online (Sandbox Code Playgroud)
它提供了一个用于同步异步操作的流畅接口。
| 归档时间: |
|
| 查看次数: |
14219 次 |
| 最近记录: |