2

我正在使用 Scala 2.10 / Akka 2.1 / Play 2.1,我对 firstCompletedOf 有疑问。如何在 firstCompletedOf 正文中识别结果的发送者?看下面的代码:

val futureString: Future[String] = myTestActor.ask(Message).mapTo[String]
val timeoutFuture = play.api.libs.concurrent.Promise.timeout("timed_out", 5 seconds)

Async {
  Future.firstCompletedOf(Seq(futureString, timeoutFuture)).map {
    case result: String => {
      println("got message " + result)
    }
  }
}

在某些时候里面myTestActor有一个sender ! "actor_result",但超时可能首先出现。

有没有一种快速、方便的方法来识别结果的发送者?sender不起作用,我认为对字符串的检查(如果等于timed_out)会很脏。

4

1 回答 1

0

怎么样:

val futureString: Future[String] = myTestActor.ask(Message).mapTo[String]
val timeoutFuture: Future[String] = play.api.libs.concurrent.Promise.timeout(throw new TimeoutException(), 5 seconds)

Async {
  Future.firstCompletedOf(Seq(futureString, timeoutFuture)) map {
    case result: String => println("got message " + result)
  } recover {
    case _: TimeoutException => "Timed out?"
  }
}
于 2013-03-09T12:34:12.200 回答