为什么 Future(1) return 回复和编译程序的结果不同?

Why Future(1) return diffrent result between repl and compiled prog?

在 repl 中使用 future:

scala> val a=Future{1}
a: scala.concurrent.Future[Int] = Future(<not completed>)

scala> a.value
res0: Option[scala.util.Try[Int]] = Some(Success(1))

return 一些(成功(1))

在IDEA中使用:

object A extends App{
 val a=Future{1}
 println(a.value)
}

return None:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"...
None

为什么?没有像 Thread.Sleep 这样的东西,所以在任何情况下,我认为 Future 会立即 return,给我 Some(Successs(1))

谢谢!

Future是异步执行的。它被提交到线程池队列,其中一个可用线程最终将其拾取并执行。

当你在 repl 中 运行 时,某个地方(可能在 IO 期间),当前线程失去控制,上下文切换,另一个线程有机会从队列中获取任务并完成它.

当运行它作为一个程序时,a.valuea=Future之后立即执行,在同一个线程中,异步任务仍然坐在队列中。