在以下代码中:
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。
我找不到任何其他实现。
那么,在这里调用哪个具体的完成?
答案 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
// ...
}