我有一个演员,他的状态是变化无常的。在我的接收方法中,我使用模式匹配消息,并调用一些将返回未来的服务。这个未来将修改我的Actor实例中的状态。这种状态不安全吗?既然未来将在不同的线程中执行,我的Actor中的状态是否保证线程安全?
发布于 2015-05-12 19:53:21
不,这将不是线程安全,正如您正确地假设的那样。期货运行在执行上下文提供的任何线程上。
解决这个问题的方法是把它输送回同一个演员那里。所有参与者的输入都必须是消息。你可以找到documentation here。
一些示例代码:
import akka.pattern.pipe
//... inside the Actor somewhere:
val futureResult: Future[YourType] = something.thatReturnsAFuture()
futureResult.pipeTo(self)然后修改您的接收块,以便在将来完成后处理结果,并将其发送回此参与者:
case result: YourType => //...https://stackoverflow.com/questions/30200014
复制相似问题