我有以下代码:
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
private void TryGetReadLock()
{
if (!Locker.IsWriteLockHeld && !Locker.IsReadLockHeld)
Locker.TryEnterReadLock(WaitTimeout);
}
Locker.TryEnterReadLock
次超时。如果我在超时之前停止调试器,则Locker.IsWriteLockHeld
和Locker.IsReadLockHeld
都为false
。
问题:为什么TryEnterReadLock会在这种特殊情况下等待?
[编辑]
实际上,正如评论中所示,我在检查if条件和输入if
块之间锁定。因此,我尝试删除if
并仅留下Locker.TryEnterReadLock(WaitTimeout);
,但收到以下错误:
附加信息:写入时可能无法获取读锁定 在这种模式下锁定。
确实其他一些线程有写锁(Locker.IsWriteLockHeld = true
)。
我想要的是在一个线程具有写锁定时获得经典lock
锁定,即让线程等到一个完成,但是我找不到一种方法来执行它。