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发布这个新的检查警告吗?
ReSharper似乎不解释Monitor.TryEnter/Monitor.Exit模式等于lock语句。对我来说,这似乎是一个假阳性。
事实上,这是RSRP-441222,据报道在9.2中被固定。