打破 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() 处理程序(因此用户看不到它),但是可以 中断 链和任何可能的用户链的处理程序,如果我的任何块都失败了!换句话说 - 如果 block1block2 失败,我不想继续他可以链接到 return 值的任何可能的用户块(block3foo.

奖金问题:在 Java 世界中还有比 CompletableFuture 更好的东西吗?

这没有理由行得通。很简单,因为 thenAsync 可能会更改返回内容的类型值(从 CompletableFuture<A>CompletableFuture<B>)并且在方法 foo 中我们不知道用户将添加什么块。

所以这个想法是不自然的,这不是期货的运作方式。