未来内线后卫

Future inside guard

有什么方法可以等待 Future f 在 guard 块内完成吗?
不在 case 块内或 Try 块外。

import scala.util.Try
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

object Main extends App {
  val f = Future {
    Thread.sleep(999999)
    true
  }

  Try (1) match {
    case x if f => println("Waited for future")  // Here
    case _ => println(":(")
  }
}

您将需要这些额外的导入:

import scala.concurrent.duration._
import scala.concurrent.Await

你可以这样做:

case x if Try(Await.ready(f, 2 minutes)).isSuccess => println("Future completed")