我有一个看起来类似于
的代码public void myMethod(){
List<CompletableFuture<Void>> futures = new ArrayList<>();
//getQuestion, getAnswer, both returns a CompletableFuture<Void>
futures.add(getQuestion());
futures.add(getAnswer());
// make sure all the futures are executed.
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
}
- 关于如何在执行 myMethod()* 后测试 futures 数组的大小是否为 2 的任何指示
最佳答案
测试数组的大小没有意义。在 Java 中,数组永远不会改变它们的大小,这也适用于 futures.toArray(…)
返回的数组。如果数组的大小错误,则意味着特定集合的 toArray
实现已经返回了错误大小的数组。
您可以使用 futures.toArray(new CompletableFuture[0]))
让代码更健壮,让 toArray
实现创建一个大小合适的数组传递一个预先确定的数组。如 this article 中所述,它实际上更快,这与古老的神话相反。
当然,对于固定数量的 futures,根本不需要在 collection 和 array 之间进行转换。你可以使用
public void myMethod() {
CompletableFuture<?>[] futures = { getQuestion(), getAnswer() };
// make sure all the futures are executed.
CompletableFuture.allOf(futures).join();
}
CompletableFuture.allOf
的合约是返回一个 future ,当所有 future 都完成时,该 future 将完成,join()
将无条件等待该完成。没有什么需要检查的。如果任何 future 异常完成,join()
方法将抛出一个异常,要么是一个以原始异常为原因的 CompletionException
,要么是一个 CancellationException
当异常完成是由取消引起的。
关于java - 验证 completablefutures 列表的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57665861/