gpt4 book ai didi

java-8 - 用于 CompletableFuture 中异常处理的 finally block 等效项

转载 作者:行者123 更新时间:2023-12-03 16:13:56 26 4
gpt4 key购买 nike

我有 CompletableFuture可以返回结果或异常。我想在出现异常和正常结果的情况下执行一些通用代码。类似于 try catch finally堵塞

当前实现

CompletableFuture<Integer> future= CompletableFuture.supplyAsync(this::findAccountNumber)
.thenApply(this::calculateBalance)
.thenApply(this::notifyBalance)
.exceptionally(ex -> {
//My Exception Handling logic
return 0;
});

我可以把我的最终逻辑放在哪里?

最佳答案

最接近于 finally whenComplete .赞 handle ,它接受一个函数接收结果值或throwable,但它不提供替换结果值,而是新的完成阶段不会改变结果,就像finally .

所以

static int decode(String s) {
try {
return Integer.parseInt(s);
}
finally {
System.out.println("finally action");
}
}

相当于
static int decode1(String s) {
return CompletableFuture.completedFuture(s)
.thenApply(Integer::parseInt)
.whenComplete((i,t) -> System.out.println("finally action"))
.join();
}

所以当与
for(String s: Arrays.asList("1234", "foo bar")) try {
System.out.println("decoded: "+decode(s));
} catch(Exception ex) {
System.out.println("decoding "+s+" failed with "+ex);
}

第一个变体打印品

finally action
decoded: 1234
finally action
decoding foo bar failed with java.lang.NumberFormatException: For input string: "foo bar"

后者打印

finally action
decoded: 1234
finally action
decoding foo bar failed with java.util.concurrent.CompletionException: java.lang.NumberFormatException: For input string: "foo bar"

两者的共同点是,如果 try 块/前一阶段异常完成,则在 finally 操作中抛出的异常将取代原始结果,掩盖异常。

关于java-8 - 用于 CompletableFuture 中异常处理的 finally block 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com