¿Todavía tenemos que implementar el bloqueo al trabajar con el System.Runtime.Caching.MemoryCache
, p. llamando al Contains(key);
o ya es seguro para subprocesos?System.Runtime.Caching.MemoryCache - es necesario el bloqueo
Respuesta
La sección "Seguridad para subprocesos" en el artículo de MSDN Library unos documentos de la clase siguiente:
los miembros de instancias se garantiza que sea seguro para subprocesos.
Esto es bastante normal para las clases .NET, la documentación es repetitiva y en algunos casos seleccionados no informativa. Ese fue también el caso de MemoryCache hasta que la documentación se actualizó. El artículo de comentarios de Connect vinculado por Davide es útil para aclarar esto:
System.Runtime.Caching.MemoryCache is threadsafe. Múltiples hilos simultáneos pueden leer y escribir una instancia de MemoryCache. Internamente, thread-safety se maneja automáticamente para garantizar que la caché se actualice de manera consistente.
Lo que podría estarse refiriendo a esto es que los datos almacenados dentro de la memoria caché pueden no ser seguros para la rosca. Por ejemplo, si se coloca una lista en en la memoria caché, y dos hilos separados obtienen una referencia a la lista almacenada en la memoria caché, los dos hilos terminarán intercalados si intentan actualizar la lista simultáneamente.
De acuerdo con la nueva documentación, la clase MemoryCache ES segura para hilos.
- 1. ¿Es necesario un bloqueo en esta situación?
- 2. ¿Es necesario el bloqueo para la búsqueda del diccionario?
- 3. Implementación genérica de System.Runtime.Caching.MemoryCache
- 4. dotnet System.Web.Caching.Cache vs System.Runtime.Caching.MemoryCache
- 5. .NET Enhebrado: es necesario un bloqueo para las asignaciones
- 6. .Net/C# manager de bloqueo distribuido necesario
- 7. ¿Es necesario el prefijo khtml?
- 8. ¿Por qué el bloqueo (esto) {...} es malo?
- 9. string.c_str() ¿es necesario desasignar?
- 10. ¿Es realmente necesario KillTimer?
- 11. jquery - ¿Es $ (documento) necesario?
- 12. ¿Es necesario KillTimer?
- 13. ¿Es realmente necesario CDATA?
- 14. ¿Es necesario volátil aquí?
- 15. ¿Cuándo es necesario deshacerse?
- 16. GLES2 ¿Es glBindAttribLocation() necesario?
- 17. ¿Es necesario AssemblyInfo.cpp?
- 18. ¿Es necesario el atributo de banderas?
- 19. Erlang, ¿Es necesario cerrar el archivo aquí?
- 20. ¿Cuándo es necesario el "var" en js?
- 21. ¿Por qué es necesario el botón guardar?
- 22. ¿Por qué es necesario el método DataBind()?
- 23. En un x86 multinúcleo, ¿es necesario un BLOQUEO como prefijo de XCHG?
- 24. ¿Es necesario > alguna vez?
- 25. ¿Es necesario "ser uno mismo"?
- 26. ¿es necesario validar $ _SERVER ['REMOTE_ADDR']?
- 27. ¿Es necesario el código con el nombre del autor?
- 28. ¿Es un bloqueo (roscado) atómico?
- 29. bloqueo en el interior de bloqueo
- 30. ¿Es necesario sincronizar las escrituras/lecturas de .NET SerialPort?
clase MemoryCache es hilo de seguridad. Vea la nueva documentación de msdn. –