Что я делаю неправильно с CompletableFuture, которые не выполняются параллельно - PullRequest
0 голосов
/ 29 мая 2020

Я разделил список на 5 частей, и я хочу выполнить параллельно с помощью restTemplate, у меня есть следующий метод:

@Async
private CompletableFuture<List<Cidade>> MontarCidadesPorEstado(List<Cidade> listaCidades, List<UF> estado) {

    estado.forEach(es -> {
            Map<String, String> param = new HashMap<String, String>();
            param.put("UF", es.getSigla());

            Cidade[] cidades = restTemplate.getForObject(url, Cidade[].class, param);

            listaCidades.addAll(Arrays.asList(cidades));
     });

    return CompletableFuture.completedFuture(listaCidades);
}

Итак, я создал список CompletableFuture для выполнения всех из них параллельно, но при добавлении каждого CompletableFuture в список он уже выполняет его, не делая его параллельным, например:

     List<List<UF>> subSets = Lists.partition(estados, 5);
     List<CompletableFuture<List<Cidade>>> lstCompletableFuture = new ArrayList();

     subSets.forEach(estado -> {
         lstCompletableFuture.add(MontarCidadesPorEstado(listaCidades, estado));
     });

     CompletableFuture.allOf(lstCompletableFuture.toArray(new CompletableFuture[lstCompletableFuture.size()]));

Что я делаю неправильно, я думал, что он должен выполнить метод MontarCidadesPorEstado когда я звоню CompletableFuture.allOf.

1 Ответ

0 голосов
/ 29 мая 2020

Я предполагаю, что MontarCidadesPorEstado - это вызов локального метода.

Следовательно, вызов является локальным, он не go через прокси и не является асинхронным.

Вы определили MontarCidadesPorEstado в другом компоненте, а затем вызовите этот компонент.

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