在使用 Await.result 等待 Future 完成时,需要注意 Future 所处的上下文环境是否会影响其执行顺序。在 Map 中使用 Await.result 等待 Future 完成时,可能会遇到 Future 的执行顺序与 Map 中的顺序不一致的情况,导致 Await.result 返回结果不符合预期。
为了解决这个问题,可以使用 Future.sequence 将 Map 中的 Future 转换成一个 Future 序列,并使用 Await.result 等待序列中所有 Future 完成。代码示例如下:
import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.concurrent.Await
val futureMap: Map[String, Future[Int]] = Map( "a" -> Future.successful(1), "b" -> Future.successful(2), "c" -> Future.successful(3) )
val futureSeq: Future[Seq[Int]] = Future.sequence(futureMap.values)
val result: Seq[Int] = Await.result(futureSeq, 10.seconds)
println(result) // 输出结果为 Vector(1, 2, 3)