【问题标题】:Akka List of futures - how to wait for list of futures to finish?Akka 期货清单 - 如何等待期货清单完成?
【发布时间】:2013-06-29 03:06:51
【问题描述】:

新手在这里...

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

所以我正在创建一个期货集合,迭代我的域对象,创建一个未来(使用可调用对象)并将其添加到期货集合中。

假设 callable 返回一个布尔值,我如何确定所有的期货都已完成。

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

任何帮助表示赞赏。

不同的说法: 如何等待数组的所有项目完成?我是否必须迭代并等待每个?

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

PS:在 JAVA 中编码,以及在使用 PartialFunctions 等方面困惑,也许应用过滤器、计数和比较集合大小作为可能的解决方案...

【问题讨论】:

    标签: java akka


    【解决方案1】:

    this article为例:

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

    您似乎正在尝试编写期货,但您以错误的方式嵌套了您的集合和期货以使其正常工作。尝试创建一个Iterable 类型的Future,然后在这个未来调用get

    【讨论】:

    • 感谢 Gian,在 Akka 2.1.2 下的 Java 中 Futures.sequence 上没有 .get() @“错误的方式” - 我没有完全解释。和文章里的完全一样。添加期货时,我想将它们收集在 ArrayList> 中,当我调用 Futures.sequence() 时,我会得到 Future>。
    • 我很困惑。您仍然收到Future 回复。为什么等待这个未来不适用于您的用例?
    【解决方案2】:

    好的 - 通过执行以下操作解决了它:

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

    在哪里

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

    futures 是期货的集合,即ArrayList&lt;Future&lt;Boolean&gt;&gt;

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2016-11-06
      • 2015-08-24
      • 2015-03-10
      • 2013-06-30
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多