Поделиться через


Notifications

Часто удобно реагировать на изменения состояния. Все обратные вызовы подвергаются Orleansгарантиям на основе поворота; см. также раздел о гарантиях параллелизма.

Отслеживание подтвержденного состояния

Чтобы получать уведомления о любых изменениях в подтвержденном состоянии, JournaledGrain<TGrainState,TEventBase> подклассы могут переопределить этот метод:

protected override void OnStateChanged()
{
   // read state and/or event log and take appropriate action
}

OnStateChanged вызывается при обновлении подтвержденного состояния, т. е. увеличивается номер версии. Это может произойти, когда

  1. Более новая версия состояния была загружена из хранилища.
  2. Событие, которое было создано этим экземпляром, успешно записано в хранилище.
  3. Уведомление получено от другого экземпляра.

Обратите внимание, что так как все зерна изначально имеют нулю версии, пока начальная загрузка из хранилища не завершится, это означает, что OnStateChanged() каждый раз, когда начальная загрузка завершается с версией больше нуля.

Отслеживание предварительного состояния

Чтобы получать уведомления о любых изменениях в предварительном состоянии, JournaledGrain подклассы могут переопределить этот метод:

protected override void OnTentativeStateChanged()
{
   // read state and/or events and take appropriate action
}

OnTentativeStateChanged() вызывается всякий раз, когда изменяется предварительное состояние, т. е. при изменении объединенной последовательности (ConfirmedEvents + UnconfirmedEvents). В частности, обратный OnTentativeStateChanged() вызов всегда происходит во время RaiseEvent.