加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在scala中顺序执行期货

发布时间:2020-12-16 09:31:02 所属栏目:安全 来源:网络整理
导读:我有这种情况,我需要使用迭代器,对于函数f(item)被调用的每个项目,并返回一个Future.Unit。 然而,我需要使每个f(项目)调用顺序执行。他们不能并行运行。 for(item - it) f(item) 将不会工作,因为这将并行启动所有的电话。 我该怎么做,这样他们按顺序呢
我有这种情况,我需要使用迭代器,对于函数f(item)被调用的每个项目,并返回一个Future.Unit。

然而,我需要使每个f(项目)调用顺序执行。他们不能并行运行。

for(item <- it)
  f(item)

将不会工作,因为这将并行启动所有的电话。

我该怎么做,这样他们按顺序呢?

解决方法

如果你不介意一个很本地化的var,你可以按照以下顺序排列异步处理(每个f(item))(flatMap是序列化的):

val fSerialized = {
  var fAccum = Future{()}
  for(item <- it) {
    println(s"Processing ${item}")
    fAccum = fAccum flatMap f(item)
  }
  fAccum
}

fSerialized.onComplete{case resTry => println("All Done.")}

一般来说,避免等待操作 – 它们阻止(一种失败的异步点,消耗资源和马虎的设计,可能会死锁)

酷伎1:

您可以通过通常的嫌疑人,平面图链接Futures,它将串行化异步操作。有什么不能做的吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读