Невозможно получить Akka Future Value Akka 1.3-RC2 - PullRequest
2 голосов
/ 10 декабря 2011

Я новичок в 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.

Спасибо!

1 Ответ

5 голосов
/ 10 декабря 2011

Это действительно одна маленькая деталь, которую вам не хватает: ваш актер не отвечает!Могу ли я предложить следующее:

class FutureDemo extends Actor {
  def receive = {
    case (a: Int, b: Int) => self.reply(a + b)
  }
}
...