У меня есть основной поток, который заполняет List<T>. Далее я создаю цепочку объектов, которые будут выполняться в разных потоках, требуя доступа к списку. Первоначальный список никогда не будет записан после его создания. Моя мысль заключалась в том, чтобы передать список как IEnumerable<T> для объектов, выполняющихся на других потоках, главным образом из-за того, что они не позволяют тем, кто реализует эти объекты, записывать в список по ошибке. Другими словами, если исходный список гарантированно не записывается, безопасно ли для нескольких потоков использовать .Where или foreach в IEnumerable?
Я не уверен, что итератор сам по себе является потокобезопасным, если исходная коллекция никогда не изменяется.