.Net中对象实例的线程安全性

时间:2014-05-01 01:38:32

标签: c# asp.net multithreading

我想在静态字典中保留一些对象(用作内存中对象的工厂),并避免每次请求操作时进行实例化。工厂中的对象(内存中的对象)没有任何状态,依赖项从外部传递。我想仔细检查这里是否涉及线程安全问题,示例代码如下:

public interface IDataValidator
{
    bool Validate(long identifier);
}

public class ValidatorLocator
{
    private static readonly Dictionary<string, IDataValidator> DataValidators = new Dictionary<string, IDataValidator>
                                                                          {
                                                                            { "binary",  new BinaryDataValidator()},
                                                                              { "hex",  new HexDataValidator()}
                                                                          };
    public static IDataValidator GetDataValidator(string valType)
    {
        return DataValidators.ContainsKey(valType) ? DataValidators[valType] : null;
    }
}

public class HexDataValidator : IDataValidator
{
    public bool Validate(long identifier)
    {
        //evaluate business logic
        return true;
    }
}

public class BinaryDataValidator : IDataValidator
{
    public bool Validate(long identifier)
    {
        //evaluate business logic
        return true;
    }
}

请说明我是否正在前往任何灾难,并且非常感谢任何快速指导。对线程有点怀疑(从ASP.Net请求线程的角度来看,这看起来如何?)

1 个答案:

答案 0 :(得分:2)

您的示例代码是线程安全的:

  • 您的词典在初始创建后未被修改 - 并发的Dictionary读取是线程安全的,如果没有任何类型的写操作,则不需要同步。
  • 你的对象没有状态 - 线程安全。