【发布时间】:2016-02-29 05:07:48
【问题描述】:
我有以下 Scala 程序:
object FutureMapTest extends App {
println("start")
val f: Future[Long] = Future {
Thread.sleep(2000)
val x = 1
println(s"started with ${x}")
x
}
f.map { i =>
println(s"mapped to ${i*2}")
}
f.map {
val nothing = "nothing"
println(s"mapped to ${nothing}")
_ * 2
}
Thread.sleep(3000)
println("end")
}
我希望它在控制台上打印的是
start
started with 1
后跟(以任何顺序):
mapped to 2
mapped to nothing
紧随其后
end
它实际打印的是:
start
mapped to nothing
started with 1
mapped to 2
end
因此,似乎第二个“map”块会立即执行,而无需等待原始 future 完成。这怎么可能?
你甚至可以从原来的 future 块中删除 Thread.sleep(),结果还是一样的。
【问题讨论】:
标签: scala