thread safe example concurrentbag concurrent collection c# collections .net-4.0 thread-safety concurrent-collections

safe - concurrentdictionary c# example



¿Cuál es la diferencia entre SynchronizedCollection<T> y las otras colecciones concurrentes? (1)

La clase SynchronizedCollection<T> se introdujo primero en .NET 2.0 para proporcionar una clase de colección segura para subprocesos. Lo hace a través del bloqueo para que esencialmente tenga una List<T> donde cada acceso está envuelto en una declaración de lock .

El espacio de nombres System.Collections.Concurrent es mucho más nuevo. No se introdujo hasta .NET 4.0 e incluye un conjunto de opciones sustancialmente mejorado y más diverso. Estas clases ya no usan bloqueos para proporcionar seguridad a los subprocesos, lo que significa que deberían escalar mejor en una situación en la que múltiples subprocesos acceden a sus datos simultáneamente. Sin embargo, una clase que implementa la interfaz IList<T> está notablemente ausente entre estas opciones.

Por lo tanto, si se dirige a la versión 4.0 de .NET Framework, debe usar una de las colecciones provistas por el espacio de nombres System.Collections.Concurrent siempre que sea posible. Al igual que al elegir entre los distintos tipos de colecciones proporcionadas en System.Collections.Generic namespace , deberá elegir aquella cuyas características y características se ajusten mejor a sus necesidades específicas.

Si está apuntando a una versión anterior de .NET Framework o necesita una clase de colección que implemente la interfaz IList<T> , deberá optar por la clase SynchronizedCollection<T> .

También vale la pena leer este artículo en MSDN: cuándo usar una colección Thread-Safe

¿En qué se diferencian SynchronizedCollection<T> y las colecciones simultáneas de System.Collections.Concurrent namespace, aparte de que las colecciones concurrentes son un espacio de nombres y SynchronizedCollection<T> es una clase?

SynchronizedCollection<T> y todas las clases en colecciones concurrentes proporcionan colecciones seguras para subprocesos. ¿Cómo decido cuándo usar uno sobre el otro y por qué?