【发布时间】:2021-05-30 16:40:27
【问题描述】:
我正在学习 Scala 中的 Future 并拥有以下代码 sn-p。我正在根据名称中的第一个字母生成随机标记。
对于以下场景,我希望通过onComplete 方法打印一个列表。但它不打印任何东西。
def randomMark(name:String) = name(0) match {
case 'R'|'A'|'J'|'S' => Thread.sleep(500); 99
case _ => Thread.sleep(500); 80
}
import scala.concurrent._
import concurrent.ExecutionContext.Implicits.global
val returns = Future sequence List( Future(randomMark("Rob")), Future(randomMark("Andy")), Future(randomMark("George")) )
Thread.sleep(550)
returns onComplete { e => { val y1 = e.getOrElse("Error"); println(y1) } }
//This println statement does not execute. I expect a list List(99,99,80) to be printed
有人可以帮我理解为什么我为onComplete 方法提供的功能文字不执行吗?
谢谢!
【问题讨论】:
-
如果这是一个完整的程序,那么它会直接退出而不等待未来完成。尝试添加
Await.ready(returns, Duration.Inf)