我通过将Callable
s提交到Executor
创建了一组Futures
。伪代码:等待一批期货完成时超时?
for all tasks
futures.add(executor.submit(new callable(task)))
现在我想让所有期货最多等待n秒,直到全部完成。我知道我可以打电话给Future#get(timeout)
,但是如果我按顺序为我的所有期货在循环中调用,那么时间开始加起来。伪代码:
for all futures
future.get(timeout)
get
块以超时,直到结果已经准备就绪。因此,如果第一个在超时之前完成,第二个也在超时之前完成,那么整个执行时间至多为number of futures * timeout
而不是timeout
。
因此,我正在寻找一种方法,它接受Future
的列表和超时,并行运行,然后返回未来结果的集合。有任何想法吗?
这并不完全清楚。当超时到期时,你想要发生什么还没有完成的任务?你希望他们被取消还是被允许继续? –
他们应该被取消。另外,不知何故,我需要知道哪些已完成,哪些没有完成。我想因为我可以在期货上重复一遍,并在所有期货上调用'isDone'。 –