Как отметил Джон Скит, в пространстве имен System.Collections.Concurrent в .NET 4. теперь есть «поточно-ориентированные» коллекции.
Одной из причин того, что в предыдущих версиях .NET Framework не было одновременных коллекций (по крайней мере, я предполагаю), является то, что очень трудно гарантировать безопасность потоков, даже при одновременной коллекции.
(Это не совсем так, поскольку в некоторых коллекциях есть метод Synchronized для возврата поточно-безопасной коллекции из не поточно-безопасной коллекции, поэтому существуют некоторые поточно-безопасные коллекции ...)
Например, предположим, что у пользователя есть Потокобезопасный словарь - если требуется только вставка, если Ключ не существует, он сначала запросит коллекцию, чтобы узнать, существует ли Ключ, тогда можно выполнить вставку, если ключ не существует. Эти две операции не являются поточно-ориентированными, хотя между запросом ContainsKey и операцией Add другой поток мог бы выполнить вставку этого ключа, поэтому возникает условие гонки.
Другими словами, операции коллекции являются поточно-ориентированными, но их использование не обязательно. В этом случае нужно было бы вернуться к традиционным методам блокировки (мьютекс / монитор / семафор ...), чтобы добиться безопасности потоков, поэтому одновременный сбор ничего не купил с точки зрения многопоточной безопасности (но, вероятно, хуже для производительности) .