Java 8的CompletableFuture.allOf(CompletableFuture...cfs)将返回一个在所有给定期货完成时完成的CompletableFuture,或者如果其中一个期货完成,则抛出一个CompletionException。
如果我的期货有一个异常完成,CompletableFuture.allOf会在抛出CompletionException之前等待剩余的期货完成,还是会取消剩余的期货?
如果它等待所有的期货完成,它有什么办法使它立即返回时,任何未来抛出异常和取消剩余的期货?
发布于 2019-10-21 21:10:48
如果我的期货有一个异常完成,
CompletableFuture.allOf会在抛出CompletionException之前等待剩余的期货完成吗?
是的,它仍将等待所有的期货完成。
您可以使用此助手方法创建一个CompletableFuture,一旦任何后续操作完成,它就会异常地完成。
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));
}如果您还想取消所有其他期货,如果其中一个异常完成,您可以这样做,然后再从此方法返回:
failure.exceptionally(ex -> {
Arrays.stream(futures).forEach(f -> f.cancel(true));
return null;
});https://stackoverflow.com/questions/58491368
复制相似问题