私は計算エンジン(Akkaアクターとして実装)を作成しています。このエンジンは、いくつかの非同期アクターと同時アクターを使用して、計算の一部だけでなくデータの取得も実行します。
メインアクターは、計算を開始するためのメッセージを受信すると、計算を実行する前に、DBから3つの異なるデータを取得する必要があります。このデータ取得を行うために、データ取得ごとに1つずつ、合計3つのアクターをスピンアップしています。
次のステップに進む前に、3つのデータセットすべてが必要です。ただし、それらは非同期で同時に取得されるため、どちらが最初に返されるかを知る方法がありません。
私の最初の本能は、各プロセスのメインアクターにフラグ(ブール値)を維持することです。各子アクターがデータセットを送り返すと、メインアクターの対応するフラグがtrueに設定され、他の2つのフラグがチェックされて次に進む準備ができているかどうかが確認されます。
FSMについて詳しく知るにつれて、自分がやっていることにも合う可能性があると思います。しかし、私の「状態」のいくつかは一度に存在する可能性があります。たとえば、「WaitingForData1」、「WaitingForData2」、および「WaitingForData3」の状態はすべて共存できます。これは、FSMで行うのは正しいことではないようです。別の方法は、他の状態の浸透ごとに状態を作成することです。例えば:
- 状態1:データ1、データ2、およびデータ3を待機しています
- 状態2:データ1の準備ができており、データ2とデータ3を待機しています
- 状態3:データ2の準備ができており、データ1とデータ3を待機しています
- 状態4:データ3の準備ができており、データ1とデータ2を待機しています
- 状態5:データ1とデータ2の準備ができており、データ3を待機してい
ます..。 - 状態N:データ1、データ2、およびデータ3の準備ができています
これは私がやっていることには少しやり過ぎのようですが、実際には非同期および並行プロセスを使用するFSMを実装するための最良の方法かもしれません。
FSMの専門家からのアドバイスをいただければ幸いです。