scala - scala foreach 会阻塞吗?
问题描述
foreach
当涉及期货时,我似乎找不到任何关于在 Scala 中应该如何表现的明确文档。
例如,在以下代码段中:
def someMethod: Future[Int] = {
val mySeq: Future[Seq[Int]] = Future(Seq(1,2,3,4))
mySeq.foreach(x => println(x))
Future(1)
}
Future(1) 只有在 foreach 完成后才会评估吗?
解决方案
Future.foreach
Future
表示“成功完成后调用以下代码”。所以println
只会在mySeq
完成后调用。这可能在Future(1)
调用之前发生,但同样可能不会。
请注意,Future(Seq(1,2,3,4))
即使结果是常量,它也会异步执行。如果您将其替换为Future.successful(Seq(1,2,3,4))
then 这将立即完成,并且. 但是,后续println
将在Future(1)
foreach
调用仍然是异步的,可能会在Future(1)
(感谢 Thilo 的更正)
推荐阅读
- php - 在我的申请中重新注册的问题
- python - 到达最后一页时如何停止while循环
- here-api - HERE-API 批量地理编码卡在提交(正文格式问题?)
- html - 来自 ws3 网站的 CSS 下拉菜单
- mysql - 在MYSQL中查找具有结尾与另一个表的列匹配的列的所有行
- spring - Hibernate 与 OneToOne 和 @MapsId 组合的表继承
- iphone - 在没有博览会的情况下在 ios 设备上运行本机反应
- python - 从列表中读取到 MySql
- java - 在反向代理后面使用 SP 时出现 Spring saml 问题
- swift - 如何在 swift 中使用 segue 实现两个 ViewController 之间的委托?