Capítulo 14. Escenarios
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
En este capítulo, echaremos un vistazo a una variedad de tipos y técnicas para abordar algunos escenarios comunes al escribir programas concurrentes. Este tipo de situaciones podría llenar otro libro entero, así que he seleccionado sólo algunas de las que me han parecido más útiles.
14.1 Inicializar los recursos compartidos
Problema
En tienes un recurso que se comparte entre varias partes de tu código. Este recurso necesita ser inicializado la primera vez que se accede a él.
Solución
El framework.NET incluye un tipo específico para este fin: Lazy<T>
. Construyes una instancia del tipo Lazy<T>
con un delegado de fábrica que se utiliza para inicializar la instancia. A continuación, la instancia está disponible a través de la propiedad Value
. El siguiente código ilustra el tipo Lazy<T>
:
static
int
_simpleValue
;
static
readonly
Lazy
<
int
>
MySharedInteger
=
new
Lazy
<
int
>(()
=>
_simpleValue
++);
void
UseSharedInteger
()
{
int
sharedValue
=
MySharedInteger
.
Value
;
}
No importa cuántos hilos llamen simultáneamente a UseSharedInteger
, el delegado de fábrica sólo se ejecuta una vez, y todos los hilos esperan la misma instancia. Una vez creada, la instancia se almacena en caché y todo acceso futuro a la propiedad Value
devuelve la misma instancia (en el ejemplo anterior, MySharedInteger.Value
siempre será 0
).
Se puede utilizar un enfoque muy similar ...
Get Libro de cocina de la concurrencia en C#, 2ª edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.