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

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

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

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

【问题讨论】:

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

标签: java exception-handling completable-future


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2023-03-14
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多