diff --git a/src/Orchard/Caching/ICacheManager.cs b/src/Orchard/Caching/ICacheManager.cs index 248a245a5..09026a52b 100644 --- a/src/Orchard/Caching/ICacheManager.cs +++ b/src/Orchard/Caching/ICacheManager.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; namespace Orchard.Caching { public interface ICacheManager { @@ -7,9 +8,13 @@ namespace Orchard.Caching { } public static class CacheManagerExtensions { + + private static readonly ConcurrentDictionary _locks = new ConcurrentDictionary(); + public static TResult Get(this ICacheManager cacheManager, TKey key, bool preventConcurrentCalls, Func, TResult> acquire) { if (preventConcurrentCalls) { - lock(key) { + var lockKey = _locks.GetOrAdd(key, _ => new object()); + lock (lockKey) { return cacheManager.Get(key, acquire); } }