Если я использую коллекцию из пространства имен System.Collection.Concurrent
, такую как ConcurrentDictionary<K, V>
, с типом ключа и/или значения, который не является потокобезопасным, например ConcurrentDictionary<int, Dictionary<int, int>>
, Какие могут возникнуть проблемы?
Я предполагаю, что могу выполнять любые операции с самим ConcurrentDictionary
, но что, если я создам System.Collections.Generic.List<T>
из Dictionary<int, int>
из этого ConcurrentDictionary
и изменю его?
Здесь я создаю список с помощью LINQ в «одной строке», хотя я предполагаю, что после выполнения ToList
я не в безопасности ConcurrentDictionary
lock
?
ConcurrentDictionary<int, Dictionary<int, int>> conDict = ...;
conDict.Select(x => x.Value).ToList().ForEach(x => x.Add(1, 2));
Если это безопасно или небезопасно, я предполагаю, что это слишком
ConcurrentDictionary<int, Dictionary<int, int>> conDict = ...;
var regDictList = conDict.Select(x => x.Value).ToList();
regDictList.ForEach(x => x.Add(1, 2));