net framework cache c# thread-safety memorycache

c# - framework - ¿MemoryCache.Set() es seguro para subprocesos?



memory cache c# (2)

La documentación para los estados de MemoryCache :

Este tipo de hilo es seguro.

La documentación de MSDN para MemoryCache.Set lamentablemente no establece explícitamente si es seguro para subprocesos o no.

¿Es seguro usar .Get() y .Set() desde varios subprocesos sin un bloqueo explícito?


Sí, la clase MemoryCache es segura para subprocesos :

System.Runtime.Caching.MemoryCache es threadsafe. Varios subprocesos simultáneos pueden leer y escribir una instancia de MemoryCache. Internamente, la seguridad de subprocesos se maneja automáticamente para garantizar que la caché se actualice de manera consistente.

A lo que esto podría referirse es que los datos almacenados en el caché pueden no ser seguros para subprocesos. Por ejemplo, si se coloca una Lista en el caché, y dos subprocesos separados obtienen una referencia a la Lista almacenada en caché, los dos subprocesos terminarán pisando uno sobre el otro si ambos intentan actualizar la lista simultáneamente.

Dicho esto, los métodos Get y Set son seguros para subprocesos, pero si la estructura de datos que puede almacenar en esta memoria caché no es segura para subprocesos, es posible que tenga problemas. Imagina, por ejemplo, que guardaste un diccionario dentro de este caché. Luego, mientras que thread1 usa Get para buscar el diccionario y comienza a leerlo, thread2 usa Get para buscar este mismo diccionario e intenta escribir en él. Si bien la operación Get será segura para los subprocesos, lo que sucederá a continuación podría ser bastante desagradable.