Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ICollection.SyncRoot (Propiedad)

Obtiene un objeto que se puede utilizar para sincronizar el acceso a ICollection.

Espacio de nombres:  System.Collections
Ensamblado:  mscorlib (en mscorlib.dll)

Object SyncRoot { get; }

Valor de propiedad

Tipo: System.Object
Objeto que se puede utilizar para sincronizar el acceso a ICollection.

Para las colecciones cuyo almacén subyacente no está públicamente disponible, se espera que la implementación devuelva la instancia actual. Observe que el puntero a la actual instancia puede no ser suficiente para las colecciones que contienen otras colecciones; dichas colecciones deben devolver la propiedad SyncRoot de la colección subyacente.

La mayoría de las clases de las colecciones en el espacio de nombres System.Collections también implementan un método Synchronized, que proporciona un contenedor sincronizado en torno a la colección subyacente. Sin embargo, las clases derivadas pueden proporcionar su propia versión sincronizada de la colección mediante la propiedad SyncRoot. El código de sincronización debe realizar operaciones en la propiedad SyncRoot de la colección, no directamente en la colección. Esto garantiza un funcionamiento correcto de las colecciones que se derivan de otros objetos. En concreto, mantiene la sincronización correcta con otros subprocesos que podrían modificar al mismo tiempo la instancia de la colección.

Si no hay un método Synchronized en una colección, el uso esperado de SyncRoot presenta el siguiente aspecto:


ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    // Some operation on the collection, which is now thread safe.
}


Por su naturaleza, la enumeración mediante una colección no es un procedimiento seguro para la ejecución de subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, es posible bloquear la colección durante toda la enumeración o detectar las excepciones provocadas por los cambios que efectúen otros subprocesos.

En el siguiente ejemplo de código se muestra cómo bloquear la colección utilizando la propiedad SyncRoot durante toda la enumeración.


ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft