LazyThreadSafetyMode Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica cómo una instancia Lazy<T> sincroniza el acceso entre varios subprocesos.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Herencia
Campos
ExecutionAndPublication | 2 | Los bloqueos se usan para garantizar que solo un subproceso pueda inicializar una instancia Lazy<T> de manera segura para subprocesos. De hecho, el método de inicialización se ejecuta de forma segura para subprocesos (denominado |
None | 0 | La instancia Lazy<T> no es segura para subprocesos; si se accede a la instancia desde varios subprocesos, su comportamiento está sin definir. Use este modo solo si es indispensable un rendimiento alto y si se garantiza que la instancia Lazy<T> nunca se inicializará desde más de un subproceso. Si usa un constructor Lazy<T> que especifica un método de inicialización (parámetro |
PublicationOnly | 1 | Si varios subprocesos intentan inicializar una instancia Lazy<T> simultáneamente, se permite a todos los subprocesos ejecutar el método de inicialización (o el constructor sin parámetros, si no hay ningún método de inicialización). El primer subproceso en completar la inicialización establece el valor de la instancia Lazy<T>. Esto se conoce como |
Comentarios
Use esta enumeración para especificar el mode
parámetro de Lazy<T> constructores. Los efectos de todos los constructores en la sincronización de subprocesos se pueden describir en términos de esta enumeración, tanto si tienen mode
parámetros como si no.
Una Lazy<T> instancia se inicializa mediante un método de inicialización especificado por el usuario o por el constructor sin parámetros para T
. El parámetro de un Lazy<T> constructor especifica el valueFactory
método de inicialización. El método devuelve una instancia de T
, que es el tipo al que se crea una instancia diferida por la instancia de Lazy<T>. Si un constructor no tiene un valueFactory
parámetro , se usa el constructor sin parámetros para T
para inicializar la Lazy<T> instancia. En cualquier caso, la inicialización se produce la primera vez que se llama a la Lazy<T>.Value propiedad .
Además de especificar la seguridad de subprocesos de una Lazy<T> instancia, esta enumeración afecta al almacenamiento en caché de excepciones. Cuando las excepciones se almacenan en caché para una Lazy<T> instancia, solo se obtiene una oportunidad de inicializar la instancia. Si se produce una excepción la primera vez que se llama a la Lazy<T>.Value propiedad , esa excepción se almacena en caché y se vuelve a iniciar en todas las llamadas posteriores a la Lazy<T>.Value propiedad . La ventaja de almacenar en caché las excepciones es que los dos subprocesos siempre obtienen el mismo resultado, incluso cuando se producen errores.
Al especificar el modo PublicationOnly, las excepciones nunca se almacenan en caché. Al especificar None o ExecutionAndPublication, el almacenamiento en caché depende de si se especifica un método de inicialización o se permite usar el constructor T
sin parámetros. Al especificar un método de inicialización, se permite el almacenamiento en caché de excepciones para estos dos modos. El método de inicialización puede ser muy simple. Por ejemplo, podría llamar al constructor sin parámetros para T
: new Lazy<Contents>(() => new Contents(), mode)
en C# o New Lazy(Of Contents)(Function() New Contents())
en Visual Basic. Si usa un constructor que no especifica un método de inicialización, las excepciones producidas por el constructor sin parámetros para T
no se almacenan en caché. En la tabla siguiente se resume el comportamiento del almacenamiento en caché de excepciones.
Mode | Uso del método de inicialización | Uso del constructor sin parámetros para T |
---|---|---|
Ninguno | Almacenado en memoria caché | No almacenado en caché |
PublicationOnly | No almacenado en caché | No almacenado en caché |
ExecutionAndPublication | Almacenado en memoria caché | No almacenado en caché |