Я пытаюсь преобразовать блокирующее действие контроллера платформы Play, которое выглядит следующим образом:
public Result testSync(String param1, String param2) {
String result1 = <LONG-DB-QUERY>;
if (result1 == null) {
return internalServerError();
}
if (result1.equals("<SOME VALUE>")) {
return ok(param1);
}
String result2 = <LONG-DB-QUERY>;
return ok(result1 + result2);
}
в неблокирующий код с использованием интерфейса Future
, т.е. возвращая CompletionStage<Result>
Как видите, мне нужны и result1
, и result2
. Я предполагаю, что не могу использовать supplyAsync
и thenCombine
, потому что result2
нужно вычислять только при определенных обстоятельствах.
result2
, даже если не используете его результат. Кроме того, оба запроса выполняются параллельно, так что вы можете фактически получить результат второго запроса вместо первого, если он быстрее — так задумано? 15.03.2018