异步获取结果

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());



捕获异常处理
return CompletableFuture.supplyAsync(() -> MoonRPCClient.mappingToTargetId(moonBNS, token, id, idType, targetIdType));
List<CompletableFuture<String>> futureTaskList = new ArrayList<>();
futureTaskList.add(futureTask);

private void batchGetIDMFuture(List<CompletableFuture<String>> futureTaskList, List<String> targetIds, IDMCounter idmCounter) {
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futureTaskList.toArray(new CompletableFuture[0]));

allFutures.handle((v, ex) -> {
// 处理每个任务的结果,无论是否有异常
for (CompletableFuture<String> future : futureTaskList) {
try {
String result = future.join();
if (StringUtils.isBlank(result)) {
idmCounter.emptyCnt++;
} else {
targetIds.add(result);
}
} catch (CompletionException e) {
idmCounter.failCnt++;
idmCounter.lastFailCause = e.getCause().getMessage();
logger.warn("任务失败: {}", e.getCause().getMessage());
}
}
return null;
}).join(); // 等待整个处理流程完成
}

posted @ 2024-06-25 17:18  my日常work  阅读(21)  评论(0)    收藏  举报