Я использую словарные уведомления для создания вторичных индексов в памяти.Иногда [особенно после обновления службы] событие StateManagerChanged сервисной фабрики не срабатывает для некоторых разделов.Это предотвращает присоединение события DictionaryChanged , и мои структуры данных в памяти не заполняются, когда в базовый словарь добавляются / обновляются и т. Д. Я проверил это, добавив некоторые операторы журнала около StateManagerChanged и DictionaryChanged .Если у меня 5 разделов, StateManagerChanged меняется иногда только для 3 разделов.Я теряю уведомления от других 2 разделов.Код для добавления обработчиков событий
В конструкторе служб:
this.StateManager.StateManagerChanged += this.OnStateManagerChangedHandler;
Обработчик событий
public void OnStateManagerChangedHandler(object sender, NotifyStateManagerChangedEventArgs e)
{
if (e.Action == NotifyStateManagerChangedAction.Rebuild)
{
//this.ProcessStataManagerRebuildNotification(e);
//TODO: log and return
return;
}
this.ProcessStateManagerSingleEntityNotification(e);
}
private void ProcessStateManagerSingleEntityNotification(NotifyStateManagerChangedEventArgs e)
{
var operation = e as NotifyStateManagerSingleEntityChangedEventArgs;
if (operation.Action == NotifyStateManagerChangedAction.Add)
{
if (operation.ReliableState is IReliableDictionary2<KeyObject, ValueObject> dictionary)
{
//dictionary.RebuildNotificationAsyncCallback = this.OnDictionaryRebuildNotificationHandlerAsync;
dictionary.DictionaryChanged += this.irScheduleDictionary_DictionaryChanged;
}
}
}