Scala 为什么Future(1)返回repl和编译程序之间的不同结果?
在repl中使用future: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
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