У меня есть класс (singleton), и он содержит статический словарь
private static Dictionary<string, RepositoryServiceProvider> repositoryServices = null;
. В экземпляре этого класса я заполняю словарь (может происходить из нескольких потоков).Сначала у меня было только
RepositoryServiceProvider service = null;
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
service = new RepositoryServiceProvider(this.Server);
repositoryServices.Add(this.Server.Name, service);
}
, затем я получил некоторые исключения, так как Item уже добавлен, поэтому я изменил его на:
RepositoryServiceProvider service = null;
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
lock (padlock) {
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
service = new RepositoryServiceProvider(this.Server);
repositoryServices.Add(this.Server.Name, service);
}
}
}
, и замок находится в классе:
private static readonly object padlock = new object();
безопасен ли этот поток?или его слишком сложно?или я должен использовать ConcurentDictionary ?