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 に答える