【发布时间】:2013-05-19 20:01:36
【问题描述】:
我想通过我自己的线程与 Akka 演员互动。目前,我喜欢这样:
val res = Await.result(aref ? GroupReceive(fromRank), timeout.duration).asInstanceOf[T]
但我不确定这实际上是如何与我的线程交互的?我希望接收是异步的,即我想在接收时挂断线程以允许完成一些其他工作。我最近刚读到 Akka 收件箱系统。 inbox akka api
我想我记得 Await 每次都会创建一个新演员。 await+ask 和 inbox 有什么区别,谁能给我一个例子,说明如何创建一个收件箱并使用它与“外部”的演员交流?
编辑 澄清一下,我不希望同一个线程继续工作,我希望它停止占用 cpu 核心并让其他线程继续工作,直到它收到一些东西,然后再次醒来。
【问题讨论】:
-
在akka中你最好使用
mapTo[Type]而不是asInstanceOf -
asInstanceOf在失败时抛出异常。mapTo返回一个失败的未来。 -
危险的是,
asInstanceOf在调用特定方法时实际上可能会成功并在稍后失败。 -
是的,您可以阅读有关使用 akka 和 futures here
-
documentation中有一个例子。
标签: scala asynchronous akka actor inbox