如何实现 CompletableFuture.allOf() 在任何 future 失败时异常完成?

Gil*_*ili 10 java completable-future

CompletableFuture.allOf()我想实现和的混合,CompletableFuture.anyOf()其中一旦所有元素成功完成,返回的 future 就会成功完成,或者只要任何元素异常完成,它就会异常完成(具有相同的异常)。在多个元素失败的情况下,返回其中任何一个的异常就足够了。

用例

我有一个任务需要聚合CompletableFutures 列表返回的子结果,但是一旦其中任何一个失败,该任务就应该停止等待。我知道子任务将继续运行,这没关系。

相关问题

我发现等待未来的列表最初看起来像是一个重复的问题,但接受的答案使用CompletionService需要CallableRunnable作为输入。我正在寻找一种将已运行的CompletionStages 作为输入的解决方案。

Did*_*r L 10

这个问题实际上与Replace Futures.successfulAsList with Java 8 CompletableFuture?非常相似。

\n\n

虽然问题不完全相同,但相同的答案(来自我自己)应该可以满足您的需求。

\n\n

您可以通过组合allOf()和链接每个输入 future 来实现此目的,这exceptionally()将使返回的 futureallOf()立即失败:

\n\n
CompletableFuture<String> a = \xe2\x80\xa6, b = \xe2\x80\xa6, c = \xe2\x80\xa6;\nCompletableFuture<Void> allWithFailFast = CompletableFuture.allOf(a, b, c);\nStream.of(a, b, c)\n    .forEach(f -> f.exceptionally(e -> {\n        allWithFailFast.completeExceptionally(e);\n        return null;\n    }));\n
Run Code Online (Sandbox Code Playgroud)\n