Скажем, у меня есть несколько свойств списка. Нечто подобное:Обновление потокового кэша в кэше Справочные данные
List<CustomerTypes> CustomerTypes {get; set;}
List<FormatTypes> FormatTypes {get; set;}
List<WidgetTypes> WidgetTypes {get; set}
List<PriceList> PriceList {get; set;}
Поскольку эти значения обновляются очень редко, я кэширую их в моей службе WCF при запуске. Затем у меня есть служебная операция, которую можно вызвать для обновления.
Операция службы будет запрашивать их всех из базы данных что-то вроде этого:
// Get the data from the database.
var customerTypes = dbContext.GetCustomerTypes();
var formatTypes = dbContext.GetFormatTypes();
var widgetTypes = dbContext.GetWidgetTypes();
var priceList = dbContext.GetPriceList();
// Update the references
CustomerTypes = customerTypes;
FormatTypes = formatTypes;
WidgetTypes = widgetTypes;
PriceList = priceList;
Это приводит к очень мало времени, что это далеко не все в синхронизации. Однако они не полностью потокобезопасны. (Звонок мог получить доступ к новому типу CustomerType и старому прайс-листу.)
Как я могу это сделать так, что, хотя я обновляю ссылки, любое использование этих списков должно ждать, пока все ссылки не будут обновлены?
Используйте своего рода примитив синхронизации, например 'lock' или' ReaderWriterLockSlim'. –