Como se mencionó Jon Skeet, ahora hay "seguros hilo" colecciones en el espacio de nombres System.Collections.Concurrent en .NET 4.
Una de las razones por las que no existen colecciones concurrentes (al menos mi suposición) en anteriores.Las versiones de NET Framework es que es muy difícil garantizar la seguridad del subproceso, incluso con una recopilación simultánea.
(Esto no es del todo cierto ya que algunas colecciones ofrecen un método sincronizado para devolver una colección segura hilo de una recogida segura pero sin hilos así que hay algunas colecciones seguras hilo ...)
Por ejemplo suponer que uno tiene un diccionario seguro para subprocesos: si uno solo desea una inserción si la clave no existe, primero se consultará la colección para ver si existe la clave, luego se haría una inserción si la clave no existe. Estas dos operaciones no son seguras para hilos, sin embargo, entre la consulta de ContainsKey y la operación Agregar otro hilo podría haber hecho una inserción de esa clave por lo que hay una condición de carrera.
En otras palabras, las operaciones de la colección son seguras para hilos, pero su uso no es necesariamente. En este caso, uno debería volver a las técnicas de bloqueo tradicionales (mutex/monitor/semáforo ...) para lograr la seguridad de subprocesos, por lo que la recopilación simultánea no le ha comprado nada en términos de seguridad de subprocesos múltiples (pero probablemente sea peor para el rendimiento) .
Gran respuesta - Voy a dejar esto "sin respuesta" por un tiempo breve para mantenerlo en el radar. Si alguien tiene más enlaces a artículos sobre pre o post .Net 4.0 estado de juego sobre este tema, inclúyalo. Gracias a todos. – Andrew