首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CompletableFuture.allOf在抛出异常时取消其他期货

CompletableFuture.allOf在抛出异常时取消其他期货
EN

Stack Overflow用户
提问于 2019-10-21 17:27:45
回答 1查看 3K关注 0票数 6

Java 8的CompletableFuture.allOf(CompletableFuture...cfs)将返回一个在所有给定期货完成时完成的CompletableFuture,或者如果其中一个期货完成,则抛出一个CompletionException

如果我的期货有一个异常完成,CompletableFuture.allOf会在抛出CompletionException之前等待剩余的期货完成,还是会取消剩余的期货?

如果它等待所有的期货完成,它有什么办法使它立即返回时,任何未来抛出异常和取消剩余的期货?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-21 21:10:48

如果我的期货有一个异常完成,CompletableFuture.allOf会在抛出CompletionException之前等待剩余的期货完成吗?

是的,它仍将等待所有的期货完成。

您可以使用此助手方法创建一个CompletableFuture,一旦任何后续操作完成,它就会异常地完成。

代码语言:javascript
复制
public static CompletableFuture allOfTerminateOnFailure(CompletableFuture<?>... futures) {
    CompletableFuture<?> failure = new CompletableFuture();
    for (CompletableFuture<?> f: futures) {
        f.exceptionally(ex -> {
            failure.completeExceptionally(ex);
            return null;
        });
    }
    return CompletableFuture.anyOf(failure, CompletableFuture.allOf(futures));
}

如果您还想取消所有其他期货,如果其中一个异常完成,您可以这样做,然后再从此方法返回:

代码语言:javascript
复制
failure.exceptionally(ex -> {
    Arrays.stream(futures).forEach(f -> f.cancel(true));
    return null;
});
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58491368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档