小编Out*_*ill的帖子

在同步块内部和外部使用字段是否安全?

背景

我们的应用程序发送在数据库表中排队的电子邮件.我们发送了一些重复电子邮件的实例,所以我实现了一个锁,以防止多个线程同时发送电子邮件.

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)

.net c# resharper multithreading

8
推荐指数
2
解决办法
2954
查看次数

标签 统计

.net ×1

c# ×1

multithreading ×1

resharper ×1