¿Cómo debo guardar 2 diccionarios concurrentes en sincronización?
-
11-12-2019 - |
Pregunta
Me gusta la operación sin bloqueo del concurrentdictionyy y úsalo enDos objetos:
ConcurrentDictionary<datetime,myObj> myIndexByDate
ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
Estos dos objetos deben permanecer en sincronización.¿Es la única forma de hacerlo es usar un bloqueo, evitando así todos los beneficios del diccionario concurrente?
Solución
Crearía una clase personalizada con 2 diccionarios y usaría un bloqueo solo en los métodos que son susceptibles de cambiar el diccionario (agregar, eliminar).
No pierde los beneficios del diccionario concurrente, ya que este método requiere mucho menos código de lo que tendría que hacer usando el diccionario normal.
Otros consejos
ConcurrentDictionary es solo "Safe Safe" en las operaciones en una instancia particular.p.ej.Mientras se está invocando una llamada de concurrentesDicticionary.tryadd (), no se pueden modificar otros hilos de la colección ...
Esto no significa que mientras obtenga un valor de un diccionario y agréguelo a otro diccionario que aún existe el valor en el diccionario original mientras lo agregue al segundo.
Probablemente tenga un invariante de que los detalles de los que mientras está moviendo un valor de un diccionario al otro, no se puede eliminar valores en el diccionario original (o al menos ese valor , pero eso esUn poco más difícil de garantizar con incorporación.