验证 completablefutures 列表的大小
Verify size of list of completablefutures
我有一个类似于
的代码
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()*[ 后,关于如何测试期货数组的大小是否为 2 的任何指示=19=]
您可以将方法一分为二:
public void myMethod(){
List<CompletableFuture<Void>> futures = constructFutures();
// make sure all the futures are executed.
CompletableFuture
.allOf(futures.toArray(new CompletableFuture[futures.size()]))
.join();
}
List<CompletableFuture<Void>> constructFutures() {
List<CompletableFuture<Void>> futures = new ArrayList<>();
//getQuestion, getAnswer, both returns a CompletableFuture<Void>
futures.add(getQuestion());
futures.add(getAnswer());
return futures;
}
并为 constructFutures()
添加测试。
测试数组的大小没有意义。在 Java 中,数组永远不会改变它们的大小,这也适用于由 futures.toArray(…)
编辑的数组 return。如果数组的大小错误,则意味着特定集合的 toArray
实现已经 return 编辑了一个错误大小的数组。
您可以通过使用 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
的合约是 return 一个未来,当所有的期货都完成时,它就会完成,join()
将无条件地等待那个完成。没有什么需要检查的。如果任何 future 异常完成,join()
方法将抛出异常,要么是 CompletionException
以原始异常为原因,要么是 CancellationException
当异常完成是由取消引起的。
我有一个类似于
的代码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()*[ 后,关于如何测试期货数组的大小是否为 2 的任何指示=19=]
您可以将方法一分为二:
public void myMethod(){
List<CompletableFuture<Void>> futures = constructFutures();
// make sure all the futures are executed.
CompletableFuture
.allOf(futures.toArray(new CompletableFuture[futures.size()]))
.join();
}
List<CompletableFuture<Void>> constructFutures() {
List<CompletableFuture<Void>> futures = new ArrayList<>();
//getQuestion, getAnswer, both returns a CompletableFuture<Void>
futures.add(getQuestion());
futures.add(getAnswer());
return futures;
}
并为 constructFutures()
添加测试。
测试数组的大小没有意义。在 Java 中,数组永远不会改变它们的大小,这也适用于由 futures.toArray(…)
编辑的数组 return。如果数组的大小错误,则意味着特定集合的 toArray
实现已经 return 编辑了一个错误大小的数组。
您可以通过使用 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
的合约是 return 一个未来,当所有的期货都完成时,它就会完成,join()
将无条件地等待那个完成。没有什么需要检查的。如果任何 future 异常完成,join()
方法将抛出异常,要么是 CompletionException
以原始异常为原因,要么是 CancellationException
当异常完成是由取消引起的。