Я написал свой собственный класс монитора изменений для .Net MemoryCache. Кажется, он инициализируется хорошо, но когда я пытаюсь добавить его в кэш, он выдает исключение InvalidOperation «Метод уже был вызван и может быть вызван только один раз».
Мой класс монитора изменений
internal class MyChangeMonitor : ChangeMonitor
{
private Timer _timer;
private readonly string _uniqueId;
private readonly TypeAsOf _typeAsOf;
private readonly string _tableName;
public GprsChangeMonitor(TypeAsOf typeAsOf, string tableName)
{
bool initComplete = false;
try
{
_typeAsOf = typeAsOf;
_tableName = tableName;
_uniqueId = Guid.NewGuid().ToString();
TimeSpan ts = new TimeSpan(0, 0, 5, 0, 0);
_timer = new Timer {Interval = ts.TotalMilliseconds};
_timer.Elapsed += CheckForChanges;
_timer.Enabled = true;
_timer.Start();
initComplete = true;
}
finally
{
base.InitializationComplete();
if(!initComplete)
Dispose(true);
}
}
void CheckForChanges(object sender, System.Timers.ElapsedEventArgs e)
{
//check for changes, if different
base.OnChanged(_typeAsOf);
}
}
Код, который я использую для создания кеша policy и добавить пару ключ / значение в кеш
CacheItemPolicy policy = new CacheItemPolicy
{
UpdateCallback = OnCacheEntryUpdateCallback
};
policy.AbsoluteExpiration = SystemTime.Today.AddHours(24);
//monitor the for changes
string tableName = QuickRefreshItems[type];
MyChangeMonitor cm = new MyChangeMonitor(typeAsOf, tableName);
policy.ChangeMonitors.Add(cm);
cm.NotifyOnChanged(OnRefreshQuickLoadCacheItems);
MyCache.Set(cacheKey, value, policy);
. Вызов Set вызывает исключение недопустимой операции, что является странным, потому что, согласно документации MSDN, он выдает только исключения ArgumentNull, Argument, ArgumentOutOfRange и NotSupported.
I Я уверен, что совершаю простую ошибку. Но сложно найти хорошую документацию или примеры по написанию собственного монитора изменений. Приветствуется любая помощь