C#-ReSharper 9.x标记带有新警告的代码-“;字段同步不一致”;

本文关键字:代码 字段 不一致 同步 警告 新警告 C#-ReSharper | 更新日期: 2023-09-27 18:21:40

下面运行RS 8.2.x检查的代码没有问题;在对其运行RS9.x检查后,RS发出警告:"该字段有时在同步块内使用,有时在没有同步的情况下使用。"

// The wait time determines if we block on trying to acquire the lock.
int waitTime = lockQueue ? Timeout.Infinite : 0;
Queue<EventArgs> fredEventQueueCopy = null;
if(System.Threading.Monitor.TryEnter(fredEventQueueLocker, waitTime))
{
    try
    {
        if(fredEventQueue.Count > 0)
        {
            fredEventQueueCopy = fredEventQueue;
            fredEventQueue = new Queue<EventArgs>();
        }
    }
    finally
    {
        System.Threading.Monitor.Exit(fredEventQueueLocker);
    }
}

代码中其他地方对"fredEventQueue"的所有访问都被简单地"锁定";事实上,如果我用下面的代码替换上面的代码,RS9.x不会标记这个警告:

// The wait time determines if we block on trying to acquire the lock.
int waitTime = lockQueue ? Timeout.Infinite : 0;
Queue<EventArgs> fredEventQueueCopy = null;
lock(fredEventQueueLocker)
{
    if(fredEventQueue.Count > 0)
    {
        fredEventQueueCopy = fredEventQueue;
        fredEventQueue = new Queue<EventArgs>();
    }
}

你知道为什么RS 9.x发布这个新的检查警告吗?

C#-ReSharper 9.x标记带有新警告的代码-“;字段同步不一致”;

ReSharper似乎不解释Monitor.TryEnter/Monitor.Exit模式等于lock语句。对我来说,这似乎是一个假阳性。

事实上,这是RSRP-441222,据报道在9.2中被固定。