completablefuture是否在重新抛出的异常上完成?

jtjikinw  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(490)

我刚刚开始使用completablefuture,并且已经很喜欢它了。
但在使用completablefuture时,我发现一件奇怪的事情,就是它的方法“exceptive”
假设我有一个 CompletableFuture<?> cf1. 现在,一旦数据到达,我的代码就会应用一些处理逻辑。在出现异常的情况下,我使用exceptive方法来重新计时 MyCustomException ```
cf1
.thenApply(myData->Some Processing Logic)
.exceptionally(ex-> throw new MyCustomException())

cf.get();

有趣的是,get方法的调用将无限期挂起,直到我终止程序。这是否意味着如果completablefuture从Exceptional块重新抛出异常,future将不会被标记为complete?我需要清楚地把它标记为完整吗?
wgxvkvu9

wgxvkvu91#

如果未来异常完成,get方法从docs抛出异常
executionexception-如果此未来异常完成
所以你可以从 exceptionally 以标识在 thenApply 打电话给我 get 价值方法
第二条路,打电话之前 get 方法可以使用allof使未来对象完成,并检查未来是否异常完成

CompletableFuture.allOf(completableFuture);
completableFuture.isCompletedExceptionally();  //true

相关问题