Akka FSM:将来转发到下一个状态时将msg发送给自己

时间:2013-09-29 15:29:50

标签: scala akka fsm

我正在使用Akka FSM演员。我的演员的简化版有两种状态:空闲和处理。 actor接收包含数据的msg,使其从空闲状态转换为处理状态。 onTransition函数启动一个长时间运行的计算,该计算使用数据并将处理后的数据发送回actor:

def onTransition{
  case Idle -> Processing => future {
    longRunning(nextStateData)
  }.map{
    result => self ! result
  }
}

我的主要问题是:假设没有发生导致我的演员执行另一个状态转换的事件,是否有任何保证我不会在空闲状态下收到处理过的数据?如果longRunning实际上没有长时间运行并立即完成,我可以在转换完成之前得到结果吗?

有没有办法在进入处理状态时启动计算?

问题:nextStateData是一个可变变量吗?我将来不应该像以上一样使用它吗?

修改

我的问题的主要观点是演员可以接收结果msg的状态。在考虑了这个之后,我很确定即使计算完成并且在状态转换期间发送结果msg,演员在转换完成之前,不会将msg从队列中弹出。因此,我可以确信actor不会在空闲状态下获得结果消息。如果我错了,请纠正我。

0 个答案:

没有答案