Документация MSDN на ToDictionary() не говорит о том, как она работает. Мне интересно, создает ли он копию словаря и его элементов или просто повторно использует те же ссылки и перечислитель.Создает ли ToDictionary() копию или ссылку?
Например, если у меня есть ConcurrentDictionary c
и создать словарь d
, вызывая c.ToDictionary(...)
, могу ли я использовать (думаю foreach
) d
независимо друг от друга (в поточно-образом) потоков обновляемых c
?
В самом деле, когда я делаю это, я получаю:
Коллекция была изменена; операция перечисления может не выполняться.
... при сериализации d
.
Он просто перечисляет ваш IEnumerable с инструкцией foreach, если вы спросите об этом, но перечисление ConcurrentDictionary является потокобезопасным и не должно вызывать исключение, о котором вы упомянули. – Evk
Нет, я спрашиваю: если я перечислил словарь, созданный из ConcurrentDictionary, является ли это потокобезопасным при обновлении исходного ConcurrentDictionary? – Gigi
Они никоим образом не связаны - когда вы добавляете новый элемент в ConcurrentDictionary, ваш другой диктатор не затрагивается. – Evk