Future的isCompleted方法的实现?

时间:2018-04-15 17:01:48

标签: scala future traits

在以下代码中:

val sbtFile: Future[String] = Future{
  val f = Source.fromFile("build.sbt")
  try f.getLines.mkString("\n") finally f.close()
}
println(s"status: ${sbtFile.isCompleted}")
Thread.sleep(250)
println(s"status: ${sbtFile.isCompleted}")
println(s"value: ${sbtFile.value}")

未来特质有轮询方法:isCompleted。在上面的代码中调用了这个方法。

在trait Future中,这种方法是:

abstract def isCompleted: Boolean

此外,还有一个对象,永远不会在Future随播对象中定义,它会扩展Future trait,并为isCompleted返回false。

我找不到任何其他实现。

那么,在这里调用哪个具体的完成?

1 个答案:

答案 0 :(得分:1)

在IntelliJ中,右键单击代码中的isCompleted,然后转到>实现。其中一个显示的地方是scala.concurrent.impl.Promise,评论中提到了@Antot:

 class DefaultPromise[T] extends AtomicReference[AnyRef](Nil) with Promise[T] {
// ...
   override final def isCompleted: Boolean = isCompleted0
// ...
}