I have following code:
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
private void TryGetReadLock()
{
if (!Locker.IsWriteLockHeld && !Locker.IsReadLockHeld)
Locker.TryEnterReadLock(WaitTimeout);
}
Locker.TryEnterReadLock times out. If I stop the debugger before it times out, both Locker.IsWriteLockHeld and Locker.IsReadLockHeld are false.
Question: why would TryEnterReadLock wait in this particular case?
[EDIT]
Indeed, as indicated in the comments I have lock between checking your if condition and entering the if block. So, I have tried to remove the if and leave just Locker.TryEnterReadLock(WaitTimeout);, but I receive the following error:
Additional information: A read lock may not be acquired with the write lock held in this mode.
Indeed some other thread has a write lock (Locker.IsWriteLockHeld = true).
What I want is obtain classic lock locking when one thread has the write lock, that is have the threads wait until one it finishes, but I cannot find a way to do it.