gpt4 book ai didi

java - CompletableFuture recoverWith 等效?即异常但返回 CompletableFuture

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:41 29 4
gpt4 key购买 nike

我没有看到处理具有异步结果的异常的明显方法。

例如,如果我想重试一个异步操作,我会期待这样的事情:

CompletionStage<String> cf = askPong("cause error").handleAsync((x, t) -> {
if (t != null) {
return askPong("Ping");
} else {
return x;
}
});

askPong 询问 Actor 的地方:

public CompletionStage<String> askPong(String message){
Future sFuture = ask(actorRef, message, 1000);
final CompletionStage<String> cs = toJava(sFuture);
return cs;
}

但是 handleAsync 并没有像您想象的那样做 - 它在另一个线程上异步运行回调。此处返回 CompletionStage 是不正确的。

今日危险问题:thenApplythenComposeexceptionally 是什么?

最佳答案

这是您要找的吗?

askPong("cause error")
.handle( (pong, ex) -> ex == null
? CompletableFuture.completedFuture(pong)
: askPong("Ping")
).thenCompose(x -> x);

此外,不要使用 ...Async 方法,除非您打算异步执行所提供函数的主体。所以当你做类似的事情时

.handleAsync((x, t) -> {
if (t != null) {
return askPong("Ping");
} else {
return x;
})

您要求在单独的线程中运行 if-then-else。由于 askPong 返回一个 CompletableFuture,因此可能没有理由异步运行它。

关于java - CompletableFuture recoverWith 等效?即异常但返回 CompletableFuture<U>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652291/

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