C# ReaderWriterLockSlim.TryInterupgradeableReadLock(0)正在阻止

C# ReaderWriterLockSlim.TryInterupgradeableReadLock(0)正在阻止,c#,multithreading,concurrency,locking,readerwriterlockslim,C#,Multithreading,Concurrency,Locking,Readerwriterlockslim,在.Net应用程序中,我在其中声明了一个ReaderWriterLockSlim: private readonly ReaderWriterLockSlim m_lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); 在其他地方,我每100ms刷新一次值,所以基本上如果有一次锁不可访问,这没什么大不了的,我只想退出并等待下一次调用 因此,我有以下方法的内容: if (m_lock.TryEnter

在.Net应用程序中,我在其中声明了一个
ReaderWriterLockSlim

    private readonly ReaderWriterLockSlim m_lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
在其他地方,我每100ms刷新一次值,所以基本上如果有一次锁不可访问,这没什么大不了的,我只想退出并等待下一次调用

因此,我有以下方法的内容:

if (m_lock.TryEnterUpgradeableReadLock(0)){
   ..
}
在这个应用程序中,我目前有一个死锁(这似乎与当前的问题无关),所以我暂停了我的应用程序以检查线程,我发现我有20多个线程当前在if条件下被阻塞

这很奇怪,因为我很清楚这一点:

如果毫秒刺激值为0(零),此方法将检查锁定状态 如果所需状态不可用,则立即返回false


问题很简单whyyyyyyyyyyyyyyyyyy?我试图在
tryIntergradeable
之后放置断点,以便继续,但这不起作用。

假设ReaderWriterLockSlim出现问题,这不会让你走得很远。99.9%的情况是使用它的代码有问题。你没有发布足够的内容,当它返回false时会发生什么非常重要。我不做任何假设(如果是这样的话,我不会来这里)。如果它返回null,则不会发生任何事情。此“if”是计时器事件中调用的唯一代码。但是我试图理解它不退出这个方法的原因是什么(这是一个事实,当我暂停时,我有一个线程正在使用此锁,并且有20个线程在等待此锁。如果拥有此锁的线程位于读取锁中,而此线程位于可升级的读取锁中,会发生什么情况。它是否仍然直接退出?还有一件事,只有当我将Visual Studio附加到exe时才会发生。如果没有,则一切正常。)ng fine“问题很简单”--简单的陈述,也许。但是如果你不能提供可靠的重现问题的答案,那么就不可能回答。我同意Peter的评论。你能在一个非常小的最小程序中重现这个问题吗?如果能,请发布它。否则,你的帖子只会帮助你发泄,而不会帮助你找到解决方案。:)