打破 CompletableFutures 链
Break the CompletableFutures chain
你可以像这样用 CompletableFuture
链接 运行 个块:
CompletableFuture
.supplyAsync(block1)
.thenApply(block2)
.thenApply(block3)...
我的函数 return 就是这样一个 CompletableFuture
,有 2 个块,因此用户可以根据需要继续链接更多。
public CompletableFuture foo() {
return CompletableFuture
.supplyAsync(block1).
.thenApply(block2);
}
用户可以这样使用:
foo().thenApply(block3).join();
我想在我的方法中添加 .exceptionaly()
处理程序(因此用户看不到它),但是可以 中断 链和任何可能的用户链的处理程序,如果我的任何块都失败了!换句话说 - 如果 block1
或 block2
失败,我不想继续他可以链接到 return 值的任何可能的用户块(block3
) foo
.
奖金问题:在 Java 世界中还有比 CompletableFuture
更好的东西吗?
这没有理由行得通。很简单,因为 thenAsync
可能会更改返回内容的类型值(从 CompletableFuture<A>
到 CompletableFuture<B>
)并且在方法 foo
中我们不知道用户将添加什么块。
所以这个想法是不自然的,这不是期货的运作方式。
你可以像这样用 CompletableFuture
链接 运行 个块:
CompletableFuture
.supplyAsync(block1)
.thenApply(block2)
.thenApply(block3)...
我的函数 return 就是这样一个 CompletableFuture
,有 2 个块,因此用户可以根据需要继续链接更多。
public CompletableFuture foo() {
return CompletableFuture
.supplyAsync(block1).
.thenApply(block2);
}
用户可以这样使用:
foo().thenApply(block3).join();
我想在我的方法中添加 .exceptionaly()
处理程序(因此用户看不到它),但是可以 中断 链和任何可能的用户链的处理程序,如果我的任何块都失败了!换句话说 - 如果 block1
或 block2
失败,我不想继续他可以链接到 return 值的任何可能的用户块(block3
) foo
.
奖金问题:在 Java 世界中还有比 CompletableFuture
更好的东西吗?
这没有理由行得通。很简单,因为 thenAsync
可能会更改返回内容的类型值(从 CompletableFuture<A>
到 CompletableFuture<B>
)并且在方法 foo
中我们不知道用户将添加什么块。
所以这个想法是不自然的,这不是期货的运作方式。