ОК, поэтому существует очень базовая стратегия, позволяющая немедленно уведомлять вас о внесении изменений в словарь, не вызывая при этом каких-либо необходимых циклов ЦП, и предполагает использование Monitor.Wait
и * 1005.* / Monitor.PulseAll
.
На очень базовом уровне , у вас есть что-то вроде этого:
public Dictionary<long, CometMessage> Messages = new Dictionary<long, CometMessage>();
public void ModifyDictionary(int key, CometMessage value)
{
Messages[key] = value;
Monitor.PulseAll(Messages);
}
public void CheckChanges()
{
while(true)
{
Monitor.Wait(Messages);
// The dictionary has changed!
// TODO: Do some work!
}
}
Теперь, это очень элементарно, и выможет получить всевозможные проблемы с синхронизацией (чтение / запись), поэтому вам следует изучить реализацию блокировки 1013 * Марка Гравелла и применить ту же логику к словарю (по сути, создавая словарь блокировки).
Кроме того, приведенный выше пример сообщит вам только о том, когда изменен словарь, но не проинформирует вас о том, КАКОЙ элемент был изменен.Вероятно, будет лучше, если вы возьмете основы сверху и спроектируете свою систему так, чтобы вы знали, какой элемент был последний изменен, возможно, сохранив ключ (например, последний ключ) и просто проверив значение, связанное с ним.