我正在使用Akka FSM演员。我的演员的简化版有两种状态:空闲和处理。 actor接收包含数据的msg,使其从空闲状态转换为处理状态。 onTransition函数启动一个长时间运行的计算,该计算使用数据并将处理后的数据发送回actor:
def onTransition{
case Idle -> Processing => future {
longRunning(nextStateData)
}.map{
result => self ! result
}
}
我的主要问题是:假设没有发生导致我的演员执行另一个状态转换的事件,是否有任何保证我不会在空闲状态下收到处理过的数据?如果longRunning实际上没有长时间运行并立即完成,我可以在转换完成之前得到结果吗?
有没有办法在进入处理状态时启动计算?
问题:nextStateData是一个可变变量吗?我将来不应该像以上一样使用它吗?
修改
我的问题的主要观点是演员可以接收结果msg的状态。在考虑了这个之后,我很确定即使计算完成并且在状态转换期间发送结果msg,演员在转换完成之前,不会将msg从队列中弹出。因此,我可以确信actor不会在空闲状态下获得结果消息。如果我错了,请纠正我。