CompletableFuture 已经完成但有异常

Posted

技术标签:

【中文标题】CompletableFuture 已经完成但有异常【英文标题】:CompletableFuture already completed with an exception 【发布时间】:2018-08-13 11:39:28 【问题描述】:

CompletableFuture.completedFuture() 返回一个已经用给定值完成的CompletedFuture

我们如何构造一个已经异常完成的CompletableFuture

意思是,我希望未来抛出异常,而不是返回值。

【问题讨论】:

您需要在什么情况下这样做?我认为在很多情况下,只需抛出异常就可以完成工作(例如,使用 Spring @AsyncthenCompose() @DidierL 我有一个同步执行快速任务的方法,但返回一个CompletionStage。为什么?因为调用者希望在链接异步CompletionStages 之前同步验证输入参数,并且它需要由前置条件验证抛出的任何异常由exceptionally() 处理。 【参考方案1】:

与 Java 9 及更高版本不同,Java 8 不为此场景提供静态工厂方法。可以使用默认构造函数:

CompletableFuture<T> future = new CompletableFuture<>();
future.completeExceptionally(exception);

【讨论】:

【参考方案2】:

Java 9 提供的 CompletableFuture.failedFuture​(Throwable ex) 正是这样做的。

【讨论】:

以上是关于CompletableFuture 已经完成但有异常的主要内容,如果未能解决你的问题,请参考以下文章

CompletableFuture使用详解

转载- CompletableFuture使用详解

Java8新的异步编程方式 CompletableFuture

听说你还不知道CompletableFuture?

如何将异步CompletableFuture与完成的CompletableFuture结合起来?

如何完成 CompletableFuture<Void>?