【发布时间】:2018-10-12 08:39:50
【问题描述】:
我在CompletableFuture 中有一段代码,如果有异常则执行重试,否则完成任务。我已将资源传递给Supplier 和Consumer 以执行任务,并希望在所有任务完成后关闭这些资源(重试3 次后success/exception)。
这是一段代码:
Supplier mySupplier = new MySupplier(localContext);
CompletableFuture<String> future = CompletableFuture.supplyAsync(mySupplier);
for(int j = 0; j < (retryCount - 1); j++) {
LOGGER.debug("MySupplier accept() Retry count: "+j);
future = future.handleAsync((value, throwable) -> throwable == null? CompletableFuture.completedFuture(value): CompletableFuture.supplyAsync(mySupplier)).thenComposeAsync(Function.identity());
}
我打算将它放在我的供应商的 finally 块下,但如果发生第一个异常,资源将被关闭,我需要它们进行接下来的两次重试。
1) 如何让它工作?
2) 还有什么方法可以只在异常情况下打印重试次数?
【问题讨论】:
标签: java multithreading java-threads completable-future