public static ReadWriteLock Lock(ReaderWriterLockSlim locker, ReadWriteLockMode mode) { var readWriteLocker = new ReadWriteLock(locker, mode); switch (mode) { case ReadWriteLockMode.Read: if (!locker.TryEnterReadLock(DefaultTimeoutInMs)) { throw new LockTimeoutException(mode); } break; case ReadWriteLockMode.Write: if (!locker.TryEnterWriteLock(DefaultTimeoutInMs)) { throw new LockTimeoutException(mode); } break; case ReadWriteLockMode.UpgradeableRead: if (!locker.TryEnterUpgradeableReadLock(DefaultTimeoutInMs)) { throw new LockTimeoutException(mode); } break; } return(readWriteLocker); }
private ReadWriteLock(ReaderWriterLockSlim locker, ReadWriteLockMode mode) : this() { this.locker = locker; this.mode = mode; }
public LockTimeoutException(ReadWriteLockMode mode) : base(string.Format("Timeout waiting for '{0}' mode", mode.ToString())) { }