Future.onComplete永远不会发生

时间:2017-08-04 16:52:02

标签: scala parallel-processing callback future

我在这里看到了一个相当简单的情况:

  1. 我使用签名yield
  2. Future[(String, Date)]创建了一系列期货
  3. 我使用Future.sequenceIndexedSeq[Future[(String, Date)]]变为Future[IndexedSeq[(String, Date)]]
  4. 我打电话给onComplete关于未来的事情,在所有完成之后,对每个未来做些什么。
  5. 我这样做是因为第一波是数据库插入,我无法进行updateCalculatedField调用,直到所有插入完成,因为{{1}涉及聚合函数,我不想引入竞争条件。这是代码:

    updateCalculatedField

    我到底错在了什么? val initialInserts = for(i <- 0 until responseData.numValues()) yield { ... } val res = Future.sequence(initialInserts) res.onComplete{ case Success(seq) => for((i, d) <- seq) updateCalculatedField(i, d) case Failure(e) => e.printStackTrace() } 调用中的代码永远不会执行,程序退出时不会有任何投诉。我已经检查过,onComplete等于程序退出后数据库中的行数...所以回调应该已经执行了。我在这里不知所措。

    感谢。

0 个答案:

没有答案