0

你可以像这样链接运行块CompletableFuture

CompletableFuture
    .supplyAsync(block1)
    .thenApply(block2)
    .thenApply(block3)...

我的函数返回一个CompletableFuture带有 2 个块的函数,因此用户可以根据需要继续链接更多。

public CompletableFuture foo() {
    return CompletableFuture
               .supplyAsync(block1).
               .thenApply(block2);
}

用户可以这样使用:

foo().thenApply(block3).join();

我想.exceptionaly()在我的方法中添加处理程序(所以用户看不到它),但是如果我的任何块失败,它可能会破坏链和任何可能的用户链!换句话说 - 如果block1block2失败,我不想继续任何可能的用户块(block3),他可以链接到foo.

CompletableFuture额外的问题:在 Java 世界中还有比这更好的东西吗?

4

1 回答 1

1

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

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

于 2015-07-15T06:06:25.387 回答