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(); } }
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); } }); } }
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); }