.NET 4 ObjectCache - Can We Hook Into a “Cache Expired” Event?

前端 未结 3 1977
轮回少年
轮回少年 2021-02-12 23:47

I\'ve got a simple object being cached like this:

_myCache.Add(someKey, someObj, policy);

Where _myCache is declared as Obje

3条回答
  •  难免孤独
    2021-02-13 00:48

    This is my way to use CacheRemovedCallback event when cache expired.

    I share for whom concern.

    public static void SetObjectToCache(string cacheItemName, T obj, long expireTime)
            {
                ObjectCache cache = MemoryCache.Default;
    
                var cachedObject = (T)cache[cacheItemName];
    
                if (cachedObject != null)
                {
                    // remove it
                    cache.Remove(cacheItemName);
                }
    
                CacheItemPolicy policy = new CacheItemPolicy()
                {
                    AbsoluteExpiration = DateTimeOffset.Now.AddMilliseconds(expireTime),
                    RemovedCallback = new CacheEntryRemovedCallback(CacheRemovedCallback)
                };
    
                cachedObject = obj;
                cache.Set(cacheItemName, cachedObject, policy);
            }
    
    public static void CacheRemovedCallback(CacheEntryRemovedArguments arguments)
                {
                    var configServerIpAddress = Thread.CurrentPrincipal.ConfigurationServerIpAddress();
                    long configId = Thread.CurrentPrincipal.ConfigurationId();
                    int userId = Thread.CurrentPrincipal.UserId();
                    var tagInfoService = new TagInfoService();
                    string returnCode = string.Empty;
    
                    if (arguments.CacheItem.Key.Contains("DatatableTags_"))
                    {
                        // do what's needed
                        Task.Run(() =>
                        {
                        });
                    }
    
                }
    

提交回复
热议问题