作为scala和scalaz的新手,在使用promise的时候,遇到了问题。我的代码是这样的。
import scalaz._
import Scalaz._
object Main2 extends Application {
def sleeper() = {
Thread.sleep(2000)
}
val message = promise {
println("begin")
sleeper
println("ok")
"ok"
}
Thread.sleep(5000)
println("try to get")
println(message())
}
这个输出如下,看起来很奇怪。好像还没有调用 sleeper 方法,线程阻塞了。-
begin
try to get
但是,如果我将睡眠者替换为内联睡眠,它看起来很好 -
object Main2 extends Application {
def sleeper() = {
Thread.sleep(2000)
}
val message = promise {
println("begin")
Thread.sleep(2000)
println("ok")
"ok"
}
Thread.sleep(5000)
println("try to get")
println(message())
}
在这里输出 -
begin
ok
try to get
ok
不明白为什么,请各位大神指点一下?