我有一组期货,每个期货都可能抛出一个异常,我想以自己的方式登录并重新抛出,但这无法编译:
CompletableFuture<Void> lordOfFutures = CompletableFuture.allOf(future1, future3, future2)
.handle((screen, throwable) -> {
if (throwable!=null) {
LOG.error(throwable, throwable);
throw throwable;
} else {
return screen;
});
是否可以记录发生的第一个异常并将其重新抛出?
答案 0 :(得分:1)
handle
期望其BiFunction<? super T,Throwable,? extends U>
方法不允许抛出apply
的{{1}}。这适用于Throwable
包的所有功能。但是您根本不需要将可抛物扔回去:
java.util.function
CompletableFuture<Void> lordOfFutures = CompletableFuture.allOf(future1, future3, future2)
.whenComplete((screen, throwable) -> {
if (throwable!=null) {
LOG.error(throwable, throwable);
});
返回的未来将具有与您调用它的未来相同的完成状态或值(但仅在执行指定的操作之后)。因此,如果whenComplete
返回的未来异常完成,则“ allOf
”也将完成,否则将以相同的值完成(此处始终为lordOfFutures
)。