diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java index 613f35831..f3f153290 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java @@ -124,6 +124,10 @@ public class RetryableTask { * 重试间隔,默认1秒 */ private Duration delay = Duration.ofSeconds(1); + /** + * 异常信息 + */ + private Throwable throwable; /** * 构造方法,内部使用,调用请使用请用ofXXX @@ -174,6 +178,24 @@ public class RetryableTask { return Optional.ofNullable(this.result); } + /** + * 获取结果, 如果无法获取结果, 则抛出最后一次执行时的异常 + * + * @return 结果 + */ + public T orElseThrow() throws Throwable { + return Optional.ofNullable(this.result).orElseThrow(() -> this.throwable().orElse(new RuntimeException())); + } + + /** + * 获取异常 + * + * @return 返回包装了异常的 {@link Optional}对象 + */ + public Optional throwable() { + return Optional.ofNullable(this.throwable); + } + /** * 异步执行重试方法 * @@ -216,6 +238,7 @@ public class RetryableTask { ThreadUtil.sleep(delay.toMillis()); } + this.throwable = th; return this; }