打破CompletableFutures链

时间:2015-07-14 23:46:16

标签: java asynchronous future completable-future

您可以使用CompletableFuture链接运行块,如下所示:

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

我的函数返回一个带有2个块的CompletableFuture,所以如果用户可以继续链接更多。

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

用户可以使用它:

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

我想在我的方法中添加.exceptionaly()处理程序(因此用户没有看到它),但是如果我的任何块失败,可以打破链和任何可能的用户链!换句话说 - 如果block1block2失败,我不想继续使用任何可能的用户块(block3),他可以链接到{{的返回值1}}。

奖金问题:Java世界中有没有比foo更好的东西?

1 个答案:

答案 0 :(得分:1)

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

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