gpt4 book ai didi

java - 使用 spring async 进行并行调用后连接结果

转载 作者:行者123 更新时间:2023-12-02 04:46:14 25 4
gpt4 key购买 nike

我正在使用 spring @Async 对同一方法/后端进行并行调用。有没有一种干净的方法将他们的结果加入到列表中?这是我想出的用于进行调用/合并结果的伪代码,但我不确定这是最干净的方法。

List<Future<String>> futureStringList = new ArrayList<Future<String>>();
for(each backend call){
Future<String> futureString = backend.retrieve();
futureStringList.add(futureString);
}


List<String> actualStringList = new ArrayList<String>();

while(!futureStringList.isEmpty()){
for(Future<String> futureString: futureStringList){
if(futureString.isDone()){
actualStringList.add(futureString.get());
futureStringList.remove(futureString);
}
}
}

最佳答案

Future.get() 是一个阻塞调用,因此您实际上可以循环您的 Future 列表,并且您知道,在循环结束时,您的所有 future 已经完成。

List<Future<String>> futureStringList = new ArrayList<Future<String>>();
for(each backend call){
Future<String> futureString = backend.retrieve();
futureStringList.add(futureString);
}

List<String> actualStringList = new ArrayList<String>();
for (Future<String> stringFuture : futureStringList) {
actualStringList.add(stringFuture.get()); // blocking call
}

// all your Strings are retrieved at this point

关于java - 使用 spring async 进行并行调用后连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com