Advertisement
Guest User

Untitled

a guest
May 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.93 KB | None | 0 0
  1. private static readonly ReaderWriterLockSlim _cacheLocker = new ReaderWriterLockSlim(LockRecursionPolicy);
  2. private static Dictionary<Type, ILog> _loggerCache = new Dictionary<Type, ILog>();
  3.  
  4.  
  5. public static ILog GetLogger(Type type)
  6. {
  7.     ILog logger;
  8.  
  9.     _cacheLocker.EnterReadLock();
  10.  
  11.     try
  12.     {
  13.         if (_loggerCache.TryGetValue(type, out logger))
  14.         {
  15.             return logger;
  16.         }
  17.     }
  18.     finally
  19.     {
  20.         _cacheLocker.ExitReadLock();
  21.     }
  22.            
  23.     _cacheLocker.EnterWriteLock();
  24.     try
  25.     {
  26.         // double check, as while the read-lock was released, the dictionary could have been modified
  27.         if (_loggerCache.TryGetValue(type, out logger))
  28.         {
  29.             return logger;
  30.         }
  31.  
  32.         logger = CreateLoggerForType(type);
  33.         _loggerCache.Add(type, logger);
  34.         return logger;
  35.     }
  36.     finally
  37.     {
  38.         _cacheLocker.ExitWriteLock();
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement