如果我得到这样的值:
string value = ConfigurationManager.AppSettings["Key"];
我期待.Net(在我的情况下是MVC4)在App Domain启动时解析了应用程序设置,而我实际上是从内存中读取的。
如果情况并非如此,那么每次获取AppSettings都会保证线程安全吗?
快速尝试锻炼我的Google-Fu让我失望。
我倾向于使用这种机制来填充构造函数中的实例字段:
public class MyThing
{
private readonly string thingValue;
public MyThing()
{
thingValue = ConfigurationManager.AppSettings["Key"];
}
}
我们最近遇到了一个外部依赖失败的情况,因为他们遇到竞争条件并且“无法读取配置设置”。
这让我想知道:
答案 0 :(得分:1)
而且,就像往常一样,几乎在我问这个问题时,我的google-fu就开始了:/
MSDN lists the AppSettings method
public static NameValueCollection AppSettings { get; }
但实际上没有提到线程安全。
但是,the page for the ConfigurationManager class有一个关于线程安全的部分说:
此类型的任何公共静态(在Visual Basic中为Shared)成员都是 线程安全。任何实例成员都不能保证是线程 安全
所以看来我列出的机制是线程安全的。我仍然有兴趣看到替代方法!