Scala Future不打印结果

时间:2018-04-06 13:36:43

标签: scala

我正在使用以下代码学习Scala Future:

object DangerousAndSlowService {
    def queryNextNumber: Long = {
        50
    }
}

val number1F = Future { DangerousAndSlowService.queryNextNumber }

number1F.onComplete({
    case Success(value) => {
        println(s"Got the callback, meaning = $value")
    }
    case Failure(exception) => {
        exception.printStackTrace
    }
})

然而," 50"永远不会打印。 已经花了好几个小时但仍然无法理解。

感谢。

1 个答案:

答案 0 :(得分:2)

主线程退出而不让未来完成其工作,因此输出是非确定性的:有时它会打印一些东西,有时它不会。如果您不介意阻止主线程,可以使用Await

import scala.concurrent.Future
import scala.util.{Success, Failure}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Await
import scala.concurrent.duration._

object DangerousAndSlowService {
    def queryNextNumber: Long = {
        50
    }
}

val number1F = Future { DangerousAndSlowService.queryNextNumber }

number1F.onComplete({
    case Success(value) => {
        println(s"Got the callback, meaning = $value")
    }
    case Failure(exception) => {
        exception.printStackTrace
    }
})

Await.result(number1F, 1.second)

虽然此处需要Await来生成输出,但还要注意您应谨慎使用它。它会阻塞当前线程,当您使用异步计算和期货时,这通常不是您想要的。