我正在for循环中调用一个异步方法,并将其将来添加到列表中。我不确定为什么allOff没有等待完成所有期货并返回部分结果。看一下我的代码。
我有一个替代方法
@Overide
@Async
CompletableFuture<someType> fetchData()
{
returns new CompletableFuture<someType>();
}
我正在具有不同实例的for循环中调用上述方法。
获取所有实现一个具有方法fetchData的接口的bean。
Map<String, SomeClass> allBeans =context.getBeansOfType(SomeClass.class);
List<SomeClass> list=
allBeans.values().stream().collect(SomeClass.toList());
for (SomeClass classInstance: list) {
classInstance.fetchData().thenApply(x->{
futureList.add(x);
});
}
在此之后,我应用allOff以便可以完成所有将来,但它不等待所有和主线程执行剩余的流程。
CompletableFuture<Void> combinedFutures = CompletableFuture.allOf(
futureList.toArray(new CompletableFuture[futureList.size()]));
CompletableFuture<List<futureResponse>> finalList=
combinedFutures.thenApply(v -> {
return futureList.stream().map(m ->
m.join()).collect(Collectors.toList());
});
在finalList中,我总是得到2个对象,但是fetchData正在运行5次(基于实例数),在所有剩余的异步调用都完成之后,我看到了日志。有人可以在这里提供帮助。
观察:-将主线程置于睡眠状态30秒钟后,我可以看到列表中有所有5个对象。能否请一个人告诉我为什么主线程根本不等待所有交易完成。
我正在for循环中调用一个异步方法,并将其将来添加到列表中。我不确定为什么allOff没有等待完成所有期货并返回部分结果。看一下我的代码。 ...
您有比赛条件: