我是一名Scala新手,试图了解期货。我在REPL中输入了以下内容:
scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> import scala.concurrent.Future
import scala.concurrent.Future
scala> val m = Future(println("Message"))
Message
m: scala.concurrent.Future[Unit] = Future(<not completed>)
scala> Future(println("Another Message"))
res4: scala.concurrent.Future[Unit] = Future(<not completed>)
Another Message
在第一种情况下,我要将Future计算分配给变量m
。我还没有打电话给m
,但是Future实际上会产生“消息”字符串输出。但是我也收到一条Future(<not completed>)
消息。这里发生了什么?未来是否完成?字符串输出告诉我它有。有人可以帮我清理一下吗?
答案 0 :(得分:2)
Future将在创建后立即开始执行(取决于ExecutionContext实现并假定有可用的资源来运行它。)
您看到消息已打印到控制台这一事实表明您的期货已经完成。
尝试以下操作,看看会发生什么:
Future{
Thread.sleep(5000)
println("Message")
}
答案 1 :(得分:1)
已完成,您看到的Future(<not completed>)
只是Future的`toString()。
尝试:
import scala.concurrent.ExecutionContext.Implicits.global
val f = scala.concurrent.Future{
println("Message")
}
println(f.toString())
未来总是急切地执行。