Scala 为什么Future(1)返回repl和编译程序之间的不同结果?

Scala 为什么Future(1)返回repl和编译程序之间的不同结果?,scala,asynchronous,future,Scala,Asynchronous,Future,在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)) 返回无: "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"... Non

在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))
返回无:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"...
None
为什么?没有像线一样的东西。睡眠,所以在任何情况下,我认为未来会马上回来,给我一些(成功(1))


谢谢

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

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


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

REPL非常慢,您必须打印上一个结果,读取下一行,解析它,执行它,打印它。-这不是火箭科学。谢谢!所以prog很快,但我只让future返回值1,即使它很快,它也不能立即返回1?不,因为创建future意味着在线程池中调度任务,这是一个昂贵的操作。如果要返回已完成的未来,请使用
future.successful(1)
您可以执行
wait.result
查看所需结果。
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"...
None