public void ReadOptionalWrite(ReadLogic readLogic, Action <IDictionary <TKey, TValue> > writeLogic)
 {
     _lock.EnterUpgradeableReadLock();
     try
     {
         bool executeWrite = false;
         readLogic.Invoke(dictionary, out executeWrite);
         if (executeWrite)
         {
             _lock.EnterWriteLock();
             try
             {
                 readLogic.Invoke(dictionary, out executeWrite);
                 if (executeWrite)
                 {
                     writeLogic.Invoke(dictionary);
                 }
             }
             finally
             {
                 _lock.ExitWriteLock();
             }
         }
     }
     finally
     {
         _lock.ExitUpgradeableReadLock();
     }
 }
 public T ReadOptionalWrite <T>(ReadLogic <T> readLogic, Func <IDictionary <TKey, TValue>, T> writeLogic)
 {
     _lock.EnterUpgradeableReadLock();
     try
     {
         bool executeWrite = false;
         T    result       = readLogic.Invoke(dictionary, out executeWrite);
         if (executeWrite)
         {
             _lock.EnterWriteLock();
             try
             {
                 result = readLogic.Invoke(dictionary, out executeWrite);
                 if (executeWrite)
                 {
                     result = writeLogic.Invoke(dictionary);
                 }
             }
             finally
             {
                 _lock.ExitWriteLock();
             }
         }
         return(result);
     }
     finally
     {
         _lock.ExitUpgradeableReadLock();
     }
 }
Exemple #3
0
        public void ReadOptionalWrite(ReadLogic readLogic, Action <IDictionary <TKey, TValue> > writeLogic)
        {
            bool executeWrite = false;

            Read(readDict => readLogic.Invoke(readDict, out executeWrite));
            if (executeWrite)
            {
                Write(delegate(IDictionary <TKey, TValue> writeDict)
                {
                    readLogic.Invoke(writeDict, out executeWrite);
                    if (executeWrite)
                    {
                        writeLogic.Invoke(writeDict);
                    }
                });
            }
        }
Exemple #4
0
        public T ReadOptionalWrite <T>(ReadLogic <T> readLogic, Func <IDictionary <TKey, TValue>, T> writeLogic)
        {
            bool executeWrite = false;
            T    result       = Read(readDict => readLogic.Invoke(readDict, out executeWrite));

            if (executeWrite)
            {
                Write(delegate(IDictionary <TKey, TValue> writeDict)
                {
                    result = readLogic.Invoke(writeDict, out executeWrite);
                    if (executeWrite)
                    {
                        result = writeLogic.Invoke(writeDict);
                    }
                });
            }
            return(result);
        }