Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
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

LazyThreadSafetyMode (Enumeración)

Especifica cómo una instancia de System.Lazy(Of T) sincroniza el acceso entre varios subprocesos.

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

'Declaración
Public Enumeration LazyThreadSafetyMode

Nombre de miembroDescripción
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExecutionAndPublicationSe usan bloqueos para garantizar que solo un subproceso puede inicializar una instancia de Lazy(Of T) de una manera segura para subprocesos. Si el método de inicialización (o el constructor predeterminado, si no hay ningún método de inicialización) utiliza los bloqueos internamente, se pueden producir interbloqueos. Si utiliza un constructor Lazy(Of T) que especifica un método de inicialización (parámetrovalueFactory ), y si ese método de inicialización produce una excepción (o no administra una excepción) la primera vez que llama a la propiedad Lazy(Of T).Value, la excepción se almacena en memoria caché y se produce de nuevo en llamadas subsiguientes a la propiedad Lazy(Of T).Value. Si usa un constructor Lazy(Of T) que no especifica ningún método de inicialización, las excepciones producidas por el constructor predeterminado de T no se almacenan en memoria caché. En ese caso, una llamada subsiguiente a la propiedad Lazy(Of T).Value podría inicializar la instancia Lazy(Of T) correctamente. Si el método de inicialización tiene acceso de forma recursiva a la propiedad Value de la instancia Lazy(Of T), se produce InvalidOperationException.
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNoneLa instancia de Lazy(Of T) no es segura para subprocesos; se desconoce el comportamiento si se tiene acceso a la instancia desde varios subprocesos. Use este modo únicamente cuando sea crucial obtener un alto rendimiento y se garantice que la instancia de Lazy(Of T) nunca se vaya a inicializar desde más de un subproceso. Si utiliza un constructor Lazy(Of T) que especifica un método de inicialización (parámetrovalueFactory ), y si ese método de inicialización produce una excepción (o no administra una excepción) la primera vez que llama a la propiedad Lazy(Of T).Value, la excepción se almacena en memoria caché y se produce de nuevo en llamadas subsiguientes a la propiedad Lazy(Of T).Value. Si usa un constructor Lazy(Of T) que no especifica ningún método de inicialización, las excepciones producidas por el constructor predeterminado de T no se almacenan en memoria caché. En ese caso, una llamada subsiguiente a la propiedad Lazy(Of T).Value podría inicializar la instancia Lazy(Of T) correctamente. Si el método de inicialización tiene acceso de forma recursiva a la propiedad Value de la instancia Lazy(Of T), se produce InvalidOperationException.
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPublicationOnlyCuando varios subprocesos intentan inicializar una instancia de Lazy(Of T) simultáneamente, todos los subprocesos pueden ejecutar el método de inicialización (o el constructor predeterminado, si no hay ningún método de inicialización). El primer subproceso que completa la inicialización, establece el valor de la instancia de Lazy(Of T). Ese valor se devuelve a cualquier otro subproceso que esté ejecutando el método de inicialización simultáneamente, a menos que el método de inicialización produzca excepciones en esos subprocesos. Se descarta cualquier instancia de T creada por los subprocesos que compiten. Si el método de inicialización produce una excepción en cualquier subproceso, la excepción se propaga fuera de la propiedad Lazy(Of T).Value en ese subproceso. La excepción no se almacena en caché. El valor de la propiedad IsValueCreated sigue siendo false y las llamadas subsiguientes a la propiedad Value, bien por parte del subproceso donde se produjo la excepción, o bien por parte de otros subprocesos, hacen que el método de inicialización se ejecute de nuevo. Si el método de inicialización tiene acceso de forma recursiva a la propiedad Value de la instancia Lazy(Of T), no se produce ninguna excepción.

Utilice esta enumeración para especificar el parámetro mode de constructores Lazy(Of T). Los efectos de todos los constructores sobre la sincronización de subprocesos se pueden describir en términos de esta enumeración, tanto si tienen los parámetros mode como si no.

Una instancia de Lazy(Of T) se inicializa mediante un método de inicialización especificado por el usuario o mediante el constructor predeterminado de T. El parámetro valueFactory de un constructor Lazy(Of T) especifica el método de inicialización. El método devuelve una instancia de T, el tipo del que la instancia de Lazy(Of T) crea instancias de forma diferida. Si un constructor no tiene un parámetro valueFactory, se utiliza el constructor predeterminado de T para inicializar la instancia de Lazy(Of T). En cualquier caso, la inicialización se produce la primera vez que se llama a la propiedad Lazy(Of T).Value.

Además de especificar la seguridad para subprocesos de una instancia Lazy(Of T), esta enumeración afecta al almacenamiento en caché de excepciones. Cuando las excepciones se almacenan en memoria caché para una instancia de Lazy(Of T), solo hay una oportunidad para inicializar la instancia. Si se produce una excepción la primera vez que llama a la propiedad Lazy(Of T).Value, esa excepción se almacena en la memoria caché y se vuelve a producir en todas las llamadas subsiguientes a la propiedad Lazy(Of T).Value. La ventaja de las excepciones de almacenamiento en caché es que dos subprocesos cualquiera obtienen siempre el mismo resultado, incluso cuando se producen errores.

Al especificar el modo PublicationOnly, las excepciones nunca se almacenan en memoria caché. Al especificar None o ExecutionAndPublication, el almacenamiento en caché depende de si se especifica un método de inicialización o se permite utilizar el constructor predeterminado para T. Al especificar un método de inicialización se habilita el almacenamiento en caché de excepciones para estos dos modos. El método de inicialización puede ser muy simple. Por ejemplo, puede llamar al constructor predeterminado para T: new Lazy<Contents>(() => new Contents(), mode) en C# o New Lazy(Of Contents)(Function() New Contents()) en Visual Basic. Si utiliza un constructor que no especifica un método de inicialización, no se almacenan en memoria caché las excepciones producidas por el constructor predeterminado de T. En la siguiente tabla se resume el comportamiento de almacenamiento en memoria caché de excepciones.

Modo

Utilizar el método de inicialización

Utilizar el constructor predeterminado para T

None

Almacenado en memoria caché

No se almacena en memoria caché

PublicationOnly

No se almacena en memoria caché

No se almacena en memoria caché

ExecutionAndPublication

Almacenado en memoria caché

No se almacena en memoria caché

.NET Framework

Compatible con: 4.5, 4

.NET Framework Client Profile

Compatible con: 4

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 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:
© 2014 Microsoft