Compartilhar via


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

  1. Uma versão mais recente do estado foi carregada do armazenamento.
  2. Um evento que foi gerado por essa instância foi gravado com êxito no armazenamento.
  3. 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.