Я новичок в Akka и создаю несколько тестовых файлов для практики концепций Akka. Следующий тест казался достаточно простым, но по какой-то причине я не могу получить значение будущего, если получу будущее от актера. Я основал все свои предположения на нескольких примерах из документации akka (http://akka.io/docs/akka/1.3-RC2/scala/futures.html#futures-scala) Например:
Это работает как волшебник:
val f = Future{ 1 + 4 }
f onComplete
{
_.value.get.fold(
v => throw new Exception("My Exception"),
println(_)
)
}
Это не:
class FutureDemo extends Actor
{
def receive =
{
case (a: Int, b: Int) =>
a + b
}
}
val fa1 = actorOf[FutureDemo].start()
val future = fa1 ? (1, 2)
future onComplete
{
_.value.get.fold(
v => throw new Exception("My Exception"),
println(_)
)
}
Мне было очень приятно узнать, что я единственный, кто когда-либо сталкивался с этой проблемой из-за предельной простоты будущего (повезло мне). Кто-нибудь поможет мне открыть глаза на очевидную проблему?
Должен заметить, что я пытался обрабатывать как внутри другого актера, так и простым основным методом. Каждый из которых не удался таким же удивительным способом, который не включал никаких уведомлений вообще. Если onComplete заменяется простым println(future.get)
, я в конечном итоге получаю исключение тайм-аута (Исключение в потоке "main" akka.dispatch.FutureTimeoutException: фьючерсы отключены по истечении [4996] миллисекунд). Я также должен отметить, что я пытался попробовать и выпущенные версии akka 1.1 и 1.2.
Спасибо!