【发布时间】:2017-04-13 10:32:00
【问题描述】:
如果我有
CompletableFuture<Something> future1 = service.request(param1);
CompletableFuture<Something> future2 = service.request(param2);
CompletableFuture<Void> many = CompletableFuture.allOf(future1, future2);
当我执行many.cancel() 时会发生什么? future1 和 future2 也会被取消吗?如果不是,那么实现这一目标的最干净的方法是什么?我不愿意坚持future1 和future2,只是为了在我想取消many 时能够取消它们。
我为什么要这样做的一些背景知识:当接收到一条数据时,我需要请求匹配,可能是未来的数据来执行计算。如果有更新的数据到达,我想取消之前的计算完成,因为结果将立即被新的计算取代。
【问题讨论】:
-
刚刚测试过:取消很多不会取消future1和future2。
-
您需要取消内部期货,然后
many将与CancellationException[]一起完成。 -
我已经假设了,因为我一直在考虑这个问题:
future1可能是超过 1 个allOf集合的一部分!所以它不是微不足道的,这可能就是它没有实施的原因...... -
请记住:您是否取消
many或每个输入期货都无关紧要。效果是一样的。 -
@MProkhorov:“效果是一样的”并不意味着效果就是 OP 所想的。在这种情况下,它意味着在组件上调用
cancel不太可能比在组合上调用cancel产生更多的效果。我已经在我的回答中详细说明了这个问题……
标签: java java-8 completable-future