最近,我遇到了一个 singelton 类的问题,该类懒惰地初始化一个字典,第二个线程会在它实际被填充之前尝试使用它。所以我通过Lazy<T>
类实现了变量初始化。
这是我的代码:
private static Dictionary<string, string> GroupDefaults
{
get { return mGroupDefaults.Value; }
}
private static Lazy<Dictionary<string, string>> mGroupDefaults =
new Lazy<Dictionary<string,string>>(delegate
{
Dictionary<string, string> defaults = new Dictionary<string, string>();
foreach (KeyValuePair<string, UnitGroup> groupDef in Groups)
defaults.Add(groupDef.Key, groupDef.Value.First().Key);
return defaults;
});
这解决了问题,现在我正在考虑将此作为我的常规做法,以便Lazy<T>
在我进行延迟初始化的任何地方使用该类以避免任何可能的线程问题。所以基本上我想知道这是否是好的/常见的做法?还是会影响性能或其他什么?