Как изменить блокирующий вызов в al oop на asyn c вызов в Java - PullRequest
0 голосов
/ 02 марта 2020

У меня есть следующий код:

  List<Map<String, Object>> results =
          inputs.stream().map(this::get).collect(Collectors.toList());

  Map<String, Object> get() {

     Future<Response> resFuture = client.get(requests);  //scala API, returns scala Future
     Response res = Await.result(resFuture, deadline);
  }

Как вместо этого изменить код на Asyn c? то есть, не используя Await.result, который блокирует.

input.stream (). Map (this :: get) - это последовательный вызов IIU C. Я хочу, чтобы "client.get ()" выполнялся параллельно для каждого элемента входных данных, а затем я могу ждать, пока все ответы будут готовы для обработки.

Похоже, Future.sequence может помочь здесь. Но не уверен, как это реализовать.

1 Ответ

0 голосов
/ 02 марта 2020

Если вы хотите получить результат объекта resFuture, вам придется подождать его. Других go.

нет. Однако, если вам не нужен результат resFuture, вы можете избежать вызова самого Await.result (...). Вызываемый класс, для которого было возвращено будущее, будет выполняться в фоновом режиме, несмотря ни на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...