通知

通常情况下,提供相应功能来针对状态变化做出反应很有用处。 所有回调均遵从 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
}

每当暂时性状态发生更改,即组合序列 (ConfirmedEvents + UnconfirmedEvents) 发生更改时,都会调用 OnTentativeStateChanged()。 特别需要指出的是,在 RaiseEvent 过程中始终会回调 OnTentativeStateChanged()