Я планирую создать список один раз в статическом конструкторе, а затем несколько экземпляров этого класса читать его (и перечислять через него) одновременно, не делая никакой блокировки.
В этой статье http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx MS описывает проблему безопасности потоков следующим образом:
Открытый статический (общий в Visual Basic) члены этого типа являются потокобезопасными. Любые члены экземпляра не являются гарантированно надежный поток.
Список может поддерживать несколько считывателей одновременно, пока коллекция не модифицировано. Перечисление через коллекцию по существу не является потокобезопасным процедура. В редком случае, когда перечисление связано с одним или несколькими доступа к записи, единственный способ обеспечить безопасность потока - это блокировка сбор в течение всего перечисление. Чтобы обеспечить сбор для доступа к нескольким потокам для чтении и письме, вы должны выполнить собственную синхронизацию.
"Перечисление через коллекцию по своей сути не является потокобезопасной процедурой". Заявление меня беспокоит.
Означает ли это, что он является потокобезопасным для сценариев только для читателей, но до тех пор, пока вы не используете перечисление?
Или это безопасно для моего сценария?
Спасибо за ответы. Зачем мне вообще нужно использовать AsReadOnly, если он будет работать с ним или без него?