您可以使用CompletableFuture
链接运行块,如下所示:
CompletableFuture
.supplyAsync(block1)
.thenApply(block2)
.thenApply(block3)...
我的函数返回一个带有2个块的CompletableFuture
,所以如果用户可以继续链接更多。
public CompletableFuture foo() {
return CompletableFuture
.supplyAsync(block1).
.thenApply(block2);
}
用户可以使用它:
foo().thenApply(block3).join();
我想在我的方法中添加.exceptionaly()
处理程序(因此用户没有看到它),但是如果我的任何块失败,可以打破链和任何可能的用户链!换句话说 - 如果block1
或block2
失败,我不想继续使用任何可能的用户块(block3
),他可以链接到{{的返回值1}}。
奖金问题:Java世界中有没有比foo
更好的东西?
答案 0 :(得分:1)
没有理由这样做。很简单,因为thenAsync
可能会更改返回内容的类型值(从CompletableFuture<A>
更改为CompletableFuture<B>
),而在方法foo
中,我们无法知道用户将添加哪些块。< / p>
所以这个想法并不自然,这不是期货的运作方式。