2013-07-01 247 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>>的集合。