Callable
をExecutor
に提出して作成したFutures
のセットがあります。擬似コード:Futuresのバッチが完了するのを待っている間にタイムアウトしましたか?
すべての完了まで、すべての先物を最大でn秒待機させたいと思います。私はFuture#get(timeout)
と呼ぶことができることを知っていますが、ループ内のすべての先物について順番に呼び出すと、タイムアウトが加算されます。擬似コード:
get
結果が準備完了するまでブロックします。したがって、最初のタイムアウトがタイムアウトの直前に完了し、2番目のタイムアウトがタイムアウトの直前に完了すると、実行時間全体がtimeout
ではなく、number of futures * timeout
になります。
したがって、私はFuture
のリストとタイムアウトのリストを受け取り、すべてを並行して実行し、その後の結果のコレクションを返します。何か案は?
これは完全にはっきりしていません。タイムアウトの期限が切れたときに完了していないタスクには、何が起こりたいのですか?あなたはそれらをキャンセルする、または続けることを許可しますか? –
キャンセルする必要があります。また、どういうわけか、完成したものと完成しなかったものを知る必要があります。私は先物についてもう一度やり直すことができ、それらのすべてで 'isDone'を呼び出すことができると思います。 –