Akka FSM アクターを使用しています。私のアクターの簡略化されたバージョンには、Idle と Processing の 2 つの状態があります。アクターはデータを含むメッセージを受信し、Idle から Processing に移行します。onTransition 関数は、データを使用して処理されたデータをアクターに送り返す、長時間実行される計算を開始します。
def onTransition{
case Idle -> Processing => future {
longRunning(nextStateData)
}.map{
result => self ! result
}
}
私の主な質問は、アクターが別の状態遷移を実行する原因となるイベントが発生しないと仮定すると、Idle 状態で処理されたデータを受信しないという保証はありますか? longRunning が実際には長時間実行されておらず、すぐに終了する場合、移行が完了する前に結果を取得できますか?
代わりに処理状態に入ったときに計算を開始する方法はありますか?
副次的な質問: nextStateData は変更可能な変数ですか? 将来、上記の方法で使用しないようにする必要がありますか?
編集:
私の質問の主なポイントは、アクターが結果メッセージを受け取ることができる状態についてです。これについて考えた後、状態遷移中に計算が終了し、結果メッセージが送信されたとしても、アクターはポップしないと確信しています。移行が完了するまで、メッセージをキューから外します。このため、アクターが Idle 状態で結果メッセージを受け取ることはないと確信できます。私が間違っている場合は、私を修正してください。