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