Notificações
Geralmente, é conveniente ter a capacidade de reagir a alterações de estado. Todos os retornos de chamada estão sujeitos às garantias baseadas em turnos do Orleans; confira também a seção sobre Garantias de Simultaneidade.
Controlar o estado confirmado
Para ser notificado de quaisquer alterações no estado confirmado, as subclasses JournaledGrain<TGrainState,TEventBase> podem substituir este método:
protected override void OnStateChanged()
{
// read state and/or event log and take appropriate action
}
OnStateChanged
é chamado sempre que o estado confirmado é atualizado, ou seja, o número de versão aumenta. Isso pode ocorrer quando
- Uma versão mais recente do estado foi carregada do armazenamento.
- Um evento que foi gerado por essa instância foi gravado com êxito no armazenamento.
- Uma mensagem de notificação foi recebida de alguma outra instância.
Observe que, como todos os grãos têm inicialmente a versão zero, até que a carga inicial do armazenamento seja concluída, isso significa que OnStateChanged() é chamado sempre que a carga inicial é concluída com uma versão maior que zero.
Rastrear o estado provisório
Para ser notificado de quaisquer alterações no estado provisório, as subclasses JournaledGrain
podem substituir este método:
protected override void OnTentativeStateChanged()
{
// read state and/or events and take appropriate action
}
OnTentativeStateChanged() será chamado sempre que o estado provisório for alterado, ou seja, se a sequência combinada (ConfirmedEvents + UnconfirmedEvents) for alterada. Em particular, um retorno de chamada para OnTentativeStateChanged()
sempre acontece durante RaiseEvent.