Scala 未来内卫

Scala 未来内卫,scala,future,guard,Scala,Future,Guard,有没有办法在防护块内等待将来的f完成不在案例块内或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 { c

有没有办法在防护块内等待将来的
f
完成
不在
案例
块内或
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")

如果f,你所说的案例x是什么意思?它是一个守卫:是的,等待未来就是这样运作的。你可以减少持续时间,比如说1秒,以减少主线程被阻塞的时间。我想这并不酷。我看起来像是
map
onSuccess
也许我不明白你想做什么。请详细说明,不需要更多。我发现了这个案子。谢谢你