2015-02-16 2 views
3

Я использую ning AsyncHttpClient из командной строки. Мне нужно дождаться окончания всех запросов, чтобы я мог спокойно позвонить close() на клиенте. Проблема в том, что я делаю много запросов из разных частей программы. Лишенный собственный код ниже, показывает один сценарий, в котором я делаю вложенную запрос HTTP от onCompleted другого запроса:Как дождаться окончания всех запросов

final AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); 

Future<Response> f1 = asyncHttpClient.prepareGet(url).execute(
    new AsyncCompletionHandler<Response>() { 

     public Response onCompleted(Response response) 
      throws Exception { 

      //Make more HTTP calls 
      Future f2 = asyncHttpClient.prepareGet(url).execute(...); 

      return response; 
     } 
    }); 

Это только пример кода. Реальный код более сложный и имеет гораздо больше HTTP-вызовов. Какой будет лучший способ убедиться, что все вызовы закончены, прежде чем я позвоню close() для клиента?

+0

Вы когда-нибудь понять это? – shadanan

ответ

0

За меньшее количество запросов, собирая все Future с, а затем используйте CompletableFuture.allOf(futureCollection).get().

Согласно документации, это может работать, а также (не тестировал пока)

((DefaultAsyncHttpClient)asyncHttpClient) 
    .getEventLoopGroup() 
    .awaitTermination(1, TimeUnit.MINUTES); 
Смежные вопросы