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

如何解决Scala中的期货清单

发布时间:2020-12-16 09:36:45 所属栏目:安全 来源:网络整理
导读:我有一个电话会返回一个未来。 但是,我需要打n个电话,所以我会收回n期货。我想知道在继续之前,我将如何获得所有的解决方案(不阻止服务器) 例如, while(counter numCalls){ val future = call(counter) future.map{ x = //do stuff } counter += 1 }//Now
我有一个电话会返回一个未来。
但是,我需要打n个电话,所以我会收回n期货。我想知道在继续之前,我将如何获得所有的解决方案(不阻止服务器)

例如,

while(counter < numCalls){
    val future = call(counter)
    future.map{  x =>
        //do stuff
    }
    counter += 1 
}

//Now I want to execute code here after ALL the futures are resolved without 
//blocking the server

解决方法

您可以使用Future.sequence(futureList)将List [Future [X]]转换为未来[List [X]]。而且由于后者只是一个简单的未来,您可以等待它在Await.ready或类似的帮助者的帮助下完成。

所以你必须保留你产生的期货的列表。就像是:

val futures = new ListBuffer[Future[X]]
while(counter < numCalls) {
    val future = call(counter)
    futures += future
    future.map { x =>
        //do stuff
    }
    counter += 1 
}
val f = Future.sequence(futures.toList)
Await.ready(f,Duration.Inf)

你也可以写作:

val futures = (1 to numCalls).map(counter => {
    f = call(counter)
    f.map(x => ...)
    f
})
Await.ready(Future.sequence(futures),Duration.Inf)

(编辑:李大同)

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

    推荐文章
      热点阅读