Scala 2.10、Akka 2.1、Play 2.1 を使用しています。バックエンドに http リクエストを送信すると、1ask
つのアクターが何かを計算します。タイムアウト前に返された場合は計算の結果を返し、それ以外の場合は別の文字列を返すという考え方です。以下のコードを参照してください。
val futureInt: Future[Int] = ask(testActor, Calculate(number.toInt)).mapTo[Int]
val timeoutFuture = play.api.libs.concurrent.Promise.timeout("Oops", 2.seconds)
Async {
Future.firstCompletedOf(Seq(futureInt, timeoutFuture)).map {
case i: Int => Ok("Got result " + i)
case t: String => Ok("timeout expired")
}
}
出演者は以下の通り。
class TestActor() extends Actor {
def receive = {
case Calculate(tonumber: Int) =>
for (a <- 1 to tonumber) {
val c: Double = scala.math.pow(a, 2)
println("a: " + a + ", c: " + c)
}
12345 // hardcoded value to return when the calculation finishes
case _ =>
println("bah")
}
}
私の問題は、アクターがタイムアウト前に終了しても、フューチャーによって何も返されないため、タイムアウトが常に期限切れになることです。私は何を間違っていますか?どうもありがとう。