عنوان:

‫تهیه نسخه thread-safe متد GetOrCreate مربوط به IMemoryCache


نویسنده: سالار ربال
تاریخ: ۱۳۹۷/۰۴/۳۰ ۱۳:۴۱
آدرس: www.dntips.ir
    public T GetOrAdd<T>(string cacheKey, Func<T> factory, DateTime absoluteExpiration)
    {
        // locks get and set internally
        if (_memoryCache.TryGetValue<T>(cacheKey, out var result))
        {
            return result;
        }
 
        lock (TypeLock<T>.Lock)
        {
            if (_memoryCache.TryGetValue(cacheKey, out result))
            {
                return result;
            }
 
            result = factory();
            _memoryCache.Set(cacheKey, result, absoluteExpiration);
 
            return result;
         }
    }    
 
    private static class TypeLock<T>
    {
        public static object Lock { get; } = new object();
    }


مشاهده مطلب اصلی