我是 Akka 新手,正在制作几个测试文件来练习 Akka 概念。下面的测试看起来很简单,但无论出于何种原因,如果我从 Actor 那里收到 future ,我都无法获得 future 的值。我的所有假设都基于 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(_)
)
}
我很高兴知道由于 future 的极端简单性,我是唯一一个遇到过这个问题的人(我很幸运)。有人能帮助我了解这个非常明显的问题吗?
我应该注意到,我曾尝试在另一个参与者内部以及一个简单的 main 方法中进行处理。每一个都以同样令人敬畏的方式失败,其中没有任何通知。如果将 onComplete 替换为简单的 println(future.get) ,我最终会得到一个超时异常(线程“main”akka.dispatch.FutureTimeoutException 中的异常:Futures 在 [4996] 毫秒后超时)。我还应该指出,我也尝试过使用 akka 的 1.1 和 1.2 发布版本。
谢谢!
最佳答案
这确实是你忽略的一个小细节:你的 Actor 没有回复!我可以提出以下建议:
class FutureDemo extends Actor {
def receive = {
case (a: Int, b: Int) => self.reply(a + b)
}
}
关于scala - 无法获取 Akka future 值 Akka 1.3-RC2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452449/