Usted tiene una jerarquía de objetos:
- tiene servidores (10)
- En cada servidor que tiene procesos (probablemente sólo 1 - su servicio/grupo de aplicación)
- en cada proceso se han roscas (probablemente muchos)
Su código única prohibir las discusiones dentro del mismo proceso en el mismo servidor de acceso para modificar el Cache
objeto simultáneamente. Puede crear bloqueos entre procesos e incluso entre servidores, pero el costo aumenta mucho a medida que asciende en la jerarquía.
El uso de la instrucción lock
en realidad no bloquea ningún subproceso. Sin embargo, si un hilo está ejecutando código dentro del bloqueo (que está en el bloque de código que sigue a la declaración lock
), cualquier otro hilo que quiera tomar el bloqueo y ejecutar el mismo código debe esperar hasta que el primer hilo que contiene el bloqueo abandone el bloque de código y libera el bloqueo.
La declaración C# lock
usa un Windows critical section que es un mecanismo de bloqueo liviano. Si desea bloquear procesos, puede usar un mutex en su lugar. Para bloquear los servidores, puede usar una base de datos o un archivo compartido.
Como dkackman ha señalado, .NET tiene el concepto de un AppDomain que es un tipo de proceso liviano. Puede tener múltiples AppDomains por proceso. La sentencia C# lock
solo bloquea un recurso dentro de un único dominio de aplicación, y una descripción adecuada de la jerarquía incluiría el dominio de la aplicación debajo del proceso y encima de los hilos. Sin embargo, con frecuencia solo tienes un dominio de aplicación único en un proceso que hace la distinción algo irrelevante.
Gracias a todos por las excelentes explicaciones, lo probé y funciona como todos sugirieron - 10 solicitudes de db. – MikeJ