异步获取结果

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 @ 2024-06-25 17:17  my日常work  阅读(5)  评论(0编辑  收藏  举报