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