Служебная ткань надежный словарь уведомлений.Событие StateManagerChanged не запускается - PullRequest
0 голосов
/ 26 сентября 2018

Я использую словарные уведомления для создания вторичных индексов в памяти.Иногда [особенно после обновления службы] событие 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;
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...