Мой актор, описанный с помощью FSM, ожидает триггера (в состоянии ожидания). Когда он получает это, он начинает обрабатывать некоторые данные (и переходит в состояние выполнения), а когда это делается, он возвращается в состояние ожидания.
Если я правильно понимаю модель FSM, с этой точки зрения было два события: начало обработки (Idle->Running) и обработка завершена (Running->Idle).
Но с актерской точки зрения было только одно сообщение.
Одна из возможностей состоит в том, чтобы делегировать саму обработку другому актеру. Таким образом, я могу перенаправить инициирующее событие и перейти в состояние «Работает», а затем, получив результат, перейти в режим ожидания. Его преимущество состоит в том, что сам FSM может быстро реагировать на запросы (например, спрашивать, каково текущее состояние), но это усложняет конструкцию.
Еще один — отправить себе завершенное сообщение, когда актор завершит обработку, что вызовет переход Running -> Idle, но для меня это выглядит немного странно.
Какие еще варианты у меня есть?
Примечание: есть несколько других состояний с различными переходами, поэтому я хотел бы придерживаться модели FSM.