CompletableFuture 已经完成但有异常
Posted
技术标签:
【中文标题】CompletableFuture 已经完成但有异常【英文标题】:CompletableFuture already completed with an exception 【发布时间】:2018-08-13 11:39:28 【问题描述】:CompletableFuture.completedFuture() 返回一个已经用给定值完成的CompletedFuture
。
我们如何构造一个已经异常完成的CompletableFuture
?
意思是,我希望未来抛出异常,而不是返回值。
【问题讨论】:
您需要在什么情况下这样做?我认为在很多情况下,只需抛出异常就可以完成工作(例如,使用 Spring@Async
或 thenCompose()
)
@DidierL 我有一个同步执行快速任务的方法,但返回一个CompletionStage
。为什么?因为调用者希望在链接异步CompletionStage
s 之前同步验证输入参数,并且它需要由前置条件验证抛出的任何异常由exceptionally()
处理。
【参考方案1】:
与 Java 9 及更高版本不同,Java 8 不为此场景提供静态工厂方法。可以使用默认构造函数:
CompletableFuture<T> future = new CompletableFuture<>();
future.completeExceptionally(exception);
【讨论】:
【参考方案2】:Java 9 提供的 CompletableFuture.failedFuture(Throwable ex)
正是这样做的。
【讨论】:
以上是关于CompletableFuture 已经完成但有异常的主要内容,如果未能解决你的问题,请参考以下文章
Java8新的异步编程方式 CompletableFuture