从 CompletableFuture 获得响应
Get response from CompletableFuture
我正在尝试将 Async
添加到我从数据库中获取的操作中。但是,我一直在尝试从 CompletableFuture.allOf()
获得响应。加入return一个'空。相反,我如何才能 return a List<QuestionResponseData>
如代码中所述。下面是我的代码
@RequestMapping(method = RequestMethod.POST, path = "/questionsByAssessmentIdAndQuestionNumber")
public List<QuestionResponseData> getQuestionsByIdAndLimit(@RequestBody QuestionOptionRequest questionOptionRequest) {
String assessmentId = questionOptionRequest.getAssessmentId();
QuestionOptionRequest request = QuestionOptionRequest.builder().assessmentId(questionOptionRequest.getAssessmentId()).startingQuestion(1).build();
CompletableFuture<List<QuestionResponseData>> questions = questionService.getQuestions(request);
QuestionOptionRequest request1 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(26).build();
CompletableFuture<List<QuestionResponseData>> questions1 = questionService.getQuestions(request1);
QuestionOptionRequest request2 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(51).build();
CompletableFuture<List<QuestionResponseData>> questions2 = questionService.getQuestions(request2);
QuestionOptionRequest request3 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(76).build();
CompletableFuture<List<QuestionResponseData>> questions3 = questionService.getQuestions(request3);
CompletableFuture.allOf(questions, questions1, questions2, questions3).join();
//return questionService.getQuestions(questionOptionRequest);
}
CompletableFuture<List<QuestionResponseData>> futures = new CompletableFuture[]{request, request1, request2, request3};
List<QuestionResponseData> result =
CompletableFuture.allOf(futures)
.thenApply(_void -> Arrays.stream(futures).map(CompletableFuture::join).flatMap(List::stream).collect(Collectors.toList()))
.join();
注意调用CompletableFuture::join
实际上并没有阻塞,阻塞已经发生在CompletableFuture::allOf
我正在尝试将 Async
添加到我从数据库中获取的操作中。但是,我一直在尝试从 CompletableFuture.allOf()
获得响应。加入return一个'空。相反,我如何才能 return a List<QuestionResponseData>
如代码中所述。下面是我的代码
@RequestMapping(method = RequestMethod.POST, path = "/questionsByAssessmentIdAndQuestionNumber")
public List<QuestionResponseData> getQuestionsByIdAndLimit(@RequestBody QuestionOptionRequest questionOptionRequest) {
String assessmentId = questionOptionRequest.getAssessmentId();
QuestionOptionRequest request = QuestionOptionRequest.builder().assessmentId(questionOptionRequest.getAssessmentId()).startingQuestion(1).build();
CompletableFuture<List<QuestionResponseData>> questions = questionService.getQuestions(request);
QuestionOptionRequest request1 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(26).build();
CompletableFuture<List<QuestionResponseData>> questions1 = questionService.getQuestions(request1);
QuestionOptionRequest request2 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(51).build();
CompletableFuture<List<QuestionResponseData>> questions2 = questionService.getQuestions(request2);
QuestionOptionRequest request3 = QuestionOptionRequest.builder().assessmentId(assessmentId).startingQuestion(76).build();
CompletableFuture<List<QuestionResponseData>> questions3 = questionService.getQuestions(request3);
CompletableFuture.allOf(questions, questions1, questions2, questions3).join();
//return questionService.getQuestions(questionOptionRequest);
}
CompletableFuture<List<QuestionResponseData>> futures = new CompletableFuture[]{request, request1, request2, request3};
List<QuestionResponseData> result =
CompletableFuture.allOf(futures)
.thenApply(_void -> Arrays.stream(futures).map(CompletableFuture::join).flatMap(List::stream).collect(Collectors.toList()))
.join();
注意调用CompletableFuture::join
实际上并没有阻塞,阻塞已经发生在CompletableFuture::allOf