如何解决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)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
