Поскольку Lookup<TKey,TElement>
является неизменным, это означает, что вы получите одинаковые значения для всех членов. Это не означает, что хранящиеся в нем предметы не могут быть изменены. Таким образом, коллекция действительно не является поточно-ориентированной. Прекрасным примером будет то, что большинство linq вычисляется лениво, а создание перечислителя может включать выполнение ленивого кода. Попытка перечисления в двух отдельных потоках может привести к тому, что коллекция будет реализована дважды, что приведет к неверному результату.
Обновление:
Теперь, когда исходный код доступен на https://referencesource.microsoft.com, подтверждается, что внутреннее состояние устанавливается во время вызовов методов без учета многопоточности, что означает, что вы можете иметь условия гонки, а класс Lookup<TKey,TElement>
фактически не является поточно-ориентированным.