1

x 量の HTTP リクエストを非同期的に作成しようとしています。私はJava での非同期 IO の質問を見ましたか? Javaで非同期HTTPリクエストを作成するにはどうすればよいですか? . 良いライブラリAsynchronous Http and WebSocket Client library for Javaを見つけましたが、複数の結果を 1 つの結果に安全に結合する方法がわかりません。たとえば、次のコードがあるとします。

AsyncHttpClient c = new AsyncHttpClient();
List<String> urls = getUrls();
List<MyResultObject> results = new ArrayList<>();
for(String url : urls)
{
    // Create asynchronous request
    Future<MyResultObject> f = c.prepareGet(url).execute(handler);

    // How can I add completed responses to my results list ???
}

これらの結果をリストに安全に結合し、すべてのリクエストが終了したときに続行するにはどうすればよいですか。

4

3 に答える 3

2

先物を使用するためのこのチュートリアルを見つけました。次のようにするだけです。

AsyncHttpClient c = new AsyncHttpClient();
List<String> urls = getUrls();
List<Future<MyResultObject>> futures = new ArrayList<>();  // keep track of your futures
List<MyResultObject> results = new ArrayList<>();
for(String url : urls)
{
    // Create asynchronous request
    Future<MyResultObject> f = c.prepareGet(url).execute(handler);
    futures.add(f);
}

// Now retrieve the result
for (Future<MyResultObject> future : futures) {
  try {
    results.add(future.get());
  } catch (InterruptedException e) {
    e.printStackTrace();
  } catch (ExecutionException e) {
    e.printStackTrace();
  }
}
// continue with your result list
于 2013-03-28T08:40:34.953 に答える
0

get()Future クラスのメソッドを呼び出して結果を取得できます。メソッドの呼び出しは、結果が得られるまでブロックされる可能性があることに注意してください

于 2013-03-28T08:10:12.813 に答える