का कारण बनता है मैंने .Net MemoryCache के लिए अपनी खुद की कस्टम परिवर्तन मॉनीटर क्लास लिखा है। ऐसा लगता है कि ठीक शुरू हो रहा है, लेकिन जब मैं इसे कैश में जोड़ने का प्रयास करता हूं, तो यह एक अमान्य ऑपरेशन अपवाद फेंकता है "विधि पहले से ही लागू की जा चुकी है, और इसे केवल एक बार बुलाया जा सकता है।".NET MemoryCache के लिए कस्टम चेंज मॉनिटर अमान्य ऑपरेशन अपवाद
मेरे परिवर्तन पर नजर रखने के वर्ग
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);
}
}
कोड मैं कैश नीति बनानी होगी और
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);
सेट कॉल कैश करने के लिए मुख्य/मान जोड़े जोड़ने के लिए उपयोग अवैध संचालन अपवाद फेंकता है जो अजीब है, क्योंकि एमएसडीएन दस्तावेज के अनुसार, यह केवल ArgumentNull, Argument, ArgumentOutOfRange, और NotSupported अपवादों को फेंकता है।
मुझे यकीन है कि मुझे एक साधारण गलती करनी होगी। लेकिन अपने स्वयं के कस्टम परिवर्तन मॉनिटर लिखने पर अच्छे दस्तावेज या उदाहरण ढूंढना मुश्किल है। किसी भी मदद
क्या आप डीबगर संलग्न कर सकते हैं, बस मेरा कोड बंद कर सकते हैं और फिर अपवादों को तोड़ सकते हैं यह देखने के लिए कि अमान्यऑपरेशन अपवाद के लिए कॉल स्टैक क्या है? –
स्टैक ट्रेस बहुत उपयोगी नहीं है। यह System.Runtime.Caching.ChangeMonitor.NotifyOnChanged (OnChangedCallback onChangedCallback) पर है, लेकिन यह NotifyOnChanged के लिए मेरे कॉलबैक में नहीं था, क्योंकि इसे नहीं कहा जा रहा है। – Keith
स्पष्ट रूप से, मुझे आइटम को कैश में जोड़ने के बाद नीति में परिवर्तन मॉनिटर जोड़ना होगा। अगर मैं इसे पहले जोड़ता हूं, तो मुझे अपवाद मिलता है। – Keith