1

ここの初心者...

ドメイン オブジェクトのコレクションに対する非常に単純な callable があります。先物を使用する際に気にすることは、すべての先物がいつ完了したかを本当に知ることだけです。

そのため、Future のコレクションを作成し、ドメイン オブジェクトを繰り返し処理し、Future を (callable を使用して) 作成し、Future のコレクションに追加しています。

callable がブール値を返すと仮定すると、すべての先物が完了したことをどのように確認できますか。

おー!2 番目のコレクション プロセスは 1 番目のコレクションに依存しているため、別のコレクションを処理する前に、このコレクションが処理されるまで待ちたいと思います。

どんな助けでも感謝します。

別の言い方: 配列のすべての項目が終了するのを待つにはどうすればよいですか? それぞれを繰り返して待つ必要がありますか?

ArrayList<Future<Object>> responses = new ArrayList<Future<Object>>();

PS: JAVA でコーディングし、PartialFunctions などの使用について混乱している可能性があります。おそらく、フィルターを適用し、コレクションのサイズをカウントして比較することで解決できます...

4

2 に答える 2

4

OK-次のようにして解決しました:

Await.result(seq, Duration.create("5 seconds"));

どこ

Future<Iterable<Boolean>> seq = Futures.sequence(futures, ec);

futuresは先物の集合、つまり ですArrayList<Future<Boolean>>

于 2013-07-01T22:27:55.120 に答える
1

この記事の例を取り上げます:

Future<Iterable<Long>> futuresSequence = sequence(futures);

// block until the futures come back
Iterable<Long> results = futuresSequence.get();

フューチャを構成しようとしているようですが、これが正しく機能するために、コレクションとフューチャを間違った方法でネストしています。Future代わりにof 型を作成してから、この futureIterableを呼び出してみてください。get

于 2013-07-01T21:29:47.057 に答える