В методе приема постоянного актора я получаю группу событий, которые хочу сохранить, и только после того, как все события сохраняются, снова обновляю свое состояние. Как я могу это сделать?
def receive: Receive = {
...
case NewEvents(events) =>
persist(events) { singleEvent =>
// Update state using this single event
}
// After every events are persisted, do one more thing
}
Обратите внимание, что вызов persist () не блокируется, поэтому я не могу вставить свой код сразу после этого.
Обновление: зачем мне это
Эти новые события поступают из внешней веб-службы. Моему постоянному актору необходимо сохранить в своем состоянии последний идентификатор события, который будет использоваться для последующего вызова ws, когда он получит команду. Дело в том, что эти команды могут приходить одновременно, поэтому мне нужна какая-то система блокировки:
- Полученная команда вызова ws: отложить следующие команды, пока не завершится эта (то есть, в общем, логическое значение)
- Полученные ответы от ws: сохранить их, обновить состояние и сохранить последний идентификатор, выполнить еще один, единственный вызов ws для всех команд, находящихся в тайнике (я сохраняю отправителей команд, чтобы они могли ответьте на них все после того, как закончите) в противном случае больше не прячьте команды.
defer
работает для ваших целей? - person Ryan   schedule 18.12.2014