我如何使用 Akka Actor Ask 并维护类型安全?或者避免使用“询问”而使用“告诉”?
打电话时?
or ask
在 Akka Actor 上,Future[Any]
返回,我必须通过进行显式转换future.mapTo[MyType]
.
我不喜欢失去这种类型的安全性。如果我直接使用 Futures(没有参与者)我可以显式返回Future[MyType]
并保持类型安全。
我的具体用例涉及一个参与者将其消息委托给两个子参与者,然后聚合这些参与者的结果并将其返回给父级的发送者。我父母的接收方法看起来与 Akka 文档中的这种方法类似:
http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Compressives http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions
val f1 = actor1 ? msg
val f2 = actor2 ? msg
val f3 = for {
a ← f1.mapTo[Int]
b ← f2.mapTo[Int]
c ← ask(actor3, (a + b)).mapTo[Int]
} yield c
有没有更好的方法来实现我的用例?
我想发布一个新答案,因为 @Roland Kuhn 最近为此提出了一个新的解决方案,称为类型化通道:
val f: Future[MyType] = actor <-?- message
- 罗兰的演讲 http://www.youtube.com/watch?v=PCk2SHufw3E
-
在 Akka 文档中 http://doc.akka.io/docs/akka/2.3-M2/scala/typed-channels.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)