我刚刚开始使用 CompletableFuture 并且已经爱上它了。
但是在使用 CompletableFuture 时,我发现的一件奇怪的事情是它的方法称为“异常(exception)”
假设我有一个
CompletableFuture<?> cf1.
现在,一旦数据到达,我的代码就会应用一些处理逻辑。如果出现异常,我使用异常方法重新抛出 MyCustomException
cf1
.thenApply(myData->Some Processing Logic)
.exceptionally(ex-> throw new MyCustomException())
cf.get();
有趣的是,对 get 方法的调用会无限期地挂起,直到我终止程序。这是否意味着如果 CompletableFuture 从异常 block 中重新抛出异常,Future 将不会被标记为完成?我需要明确地将其标记为完整吗?
最佳答案
来自文档 get如果 future 异常完成,方法会抛出异常
ExecutionException - if this future completed exceptionally
因此,您可以从异常
返回一些值来识别thenApply
期间引发的异常,并调用get
方法获取值
第二种方式,在调用 get
方法之前,您可以使用 allOf 来完成该 future 对象。 ,并检查 future 是否异常完成
CompletableFuture.allOf(completableFuture);
completableFuture.isCompletedExceptionally(); //true
关于spring - CompletableFuture 是否在重新抛出异常时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66921194/