异步获取结果

List<CompletableFuture<Map<String, Object>>> lists = contents.stream()
.map(item -> CompletableFuture.supplyAsync(() -> {
Map<String, Object> resultOne = new HashMap<>();
// 获取input
String input = item.substring(item.indexOf(startStep) + startStep.length());
resultOne.put("input", input);
// 获取traceId
String traceId = parseItemTraceId(item);
String time = parseItemTime(item);
resultOne.put("traceId", traceId);
// 查询skill_trace_log中的改traceId执行结果
String slsOutputQuery = buildSlsForQuery("output", traceId, "wrapAsSafe StreamObserver");
getLogsRequest.setQuery(slsOutputQuery);
getLogsRequest.setOffset(0L);
getLogsRequest.setLine(100L);
GetLogsResponse logsWithOptionsOutput = null;
try {
logsWithOptionsOutput = client.getLogsWithOptions(slsConfigDataSource.getTenantConfig().getProject(), slsConfigDataSource.getTenantConfig().getLogstoreBiz(), getLogsRequest, headers, runtime);
} catch (Exception e) {
e.printStackTrace();
}
if (logsWithOptionsOutput != null) {
Map<String, ?> res = logsWithOptions.getBody().get(0);
resultOne.put("userId", res.get("userId"));
resultOne.put("output", res.get("res"));
}
resultOne.put("time", time);
System.out.println(resultOne);
return resultOne;
}, threadPoolExecutor))
.collect(Collectors.toList());

// 等待所有的CompletableFuture完成并获取结果
result = lists.stream()
.map(CompletableFuture::join) // join是非阻塞的
.collect(Collectors.toList());
posted @   my日常work  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示