对状态更改做出反应通常很方便。 所有回调都受“基于轮次的保证”的约束 Orleans;另请参阅有关 并发保证的部分。
跟踪确认状态
若要收到对确认状态的任何更改的通知, JournaledGrain
子类可以重写此方法:
protected override void OnStateChanged()
{
// read state and/or event log and take appropriate action
}
OnStateChanged
每当确认的状态更新(即版本号增加)时,就会调用 。 下列情况下测试输入无效:
- 从存储中加载了较新版本的状态。
- 此实例引发的事件已成功写入存储。
- 收到来自其他某个实例的通知消息。
请注意,由于所有粒度最初都具有版本零,因此每当存储的初始负载完成且版本大于零时, OnStateChanged
都会调用。
跟踪暂定状态
若要收到对暂定状态的任何更改的通知, JournaledGrain
子类可以重写此方法:
protected override void OnTentativeStateChanged()
{
// read state and/or events and take appropriate action
}
OnTentativeStateChanged
每当暂定状态更改时调用,即当组合序列 (ConfirmedEvents
+ UnconfirmedEvents
) 发生更改时。 具体而言,回调 OnTentativeStateChanged()
始终发生在 RaiseEvent。