您可以使用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
的返回值的任何可能的用户块(foo
)。额外的问题:Java世界中还有什么比
CompletableFuture
更好的东西吗? 最佳答案
没有任何理由可以这样做。很简单,因为thenAsync
可能会更改返回值的类型值(从CompletableFuture<A>
到CompletableFuture<B>
),并且在方法foo
中我们不知道用户将添加什么块。
因此,这种想法不是自然的,也不是期货如何运作。
关于java - 打破CompletableFutures链,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31419235/