2013-07-01 249 views
1

新手这里...Akka期货清单 - 如何等待期货清单完成?

我已经有一个非常简单的可调用域对象的集合。在使用期货时,我所关心的是真正知道所有期货何时完成。

因此,我创建了一个期货集合,迭代我的域对象,创建未来(可调用)并将其添加到期货集合中。

假设可调用函数返回一个布尔值,我如何确定所有的期货已经完成。

哦!我想等到这个集合被处理,然后再处理另一个集合,因为第二个集合过程依赖于第一个集合。

任何帮助表示赞赏。

表示不同: 如何等待数组中的所有项目完成?我是否需要迭代并等待每个?

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

PS:编码在JAVA和也上使用PartialFunctions等的混淆,或许上应用滤波器,计数和对集合大小比较作为一个可能的解决方案...

回答

1

以从示例this article

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

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

看来,你试图撰写期货,但你嵌套你的收藏,期货走错了路周围使其正常工作。尝试使用Iterable类型的Future代替,然后在未来呼叫get

+0

感谢Gian, 在Java下的Futures.sequence中没有.get()方法,在Akka 2.1.2 @“错误的方法” - 我没有完全解释。 这与文章中的完全一样。在添加期货时,我想收集它们在ArrayList >中,当我调用Futures.sequence()时,我将获得Future >。 –

+0

我很困惑。你仍然在获得'未来'。为什么等待这个未来不适合你的用例呢? – Gian

4

OK - 解决它通过执行以下操作:

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

其中

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

futures是期货即ArrayList<Future<Boolean>>的集合。