背景
我们的应用程序发送在数据库表中排队的电子邮件.我们发送了一些重复电子邮件的实例,所以我实现了一个锁,以防止多个线程同时发送电子邮件.
ReSharper警告我:
该字段有时在同步块内使用,有时在没有同步的情况下使用
题
为什么ReSharper告诉我这个,为什么我会担心它?
码
这是我的(删节)代码:
private readonly IMailQueueRepository _mailQueueRepository = new MailQueueRepository();
private static object _messageQueueLock = new object();
public void SendAllQueuedMessages(IPrincipal caller)
{
lock (_messageQueueLock) // Prevent concurrent callers
{
var message = _mailQueueRepository.GetUnsentMessage();
while (message != null)
{
SendQueuedMessage(message);
message = _mailQueueRepository.GetUnsentMessage();
}
}
}
public void SendQueuedMessage(IMessage message)
{
// I get the ReSharper warning here on _mailQueueRepository
var messageAttachments = _mailQueueRepository.GetMessageAttachments(message.Id);
// etc.
}
Run Code Online (Sandbox Code Playgroud)