Безопасно ли просто перечислять словарь .NET из нескольких потоков?
Никаких изменений в Словаре не происходит вообще.
Да, в этом случае перечисление является потокобезопасным, поскольку в начале цикла foreach создается новый экземпляр перечислителя с неявным вызовом GetEnumerator.
foreach
GetEnumerator
Да ... Ну почти:
Словарь <(Of <(TKey, TValue>)>) может поддерживать несколько читателей одновременно, пока Коллекция не изменена. Даже так, перечисление через коллекцию по сути не потокобезопасный процедура. В редком случае, когда перечисление конкурирует с записью доступы, коллекция должна быть заблокирован во время всего перечисления. Чтобы разрешить доступ к коллекции несколькими потоками для чтения и писать, вы должны реализовать свой собственный синхронизации.
( ссылка )