Мне нужно создать потокобезопасный кеш одноразовых объектов. Как я это вижу:Создать потокобезопасный кеш одноразовых объектов
- У меня есть класс данных, что я хочу, чтобы кэшировать, бывший MyData
- Я создаю некоторые коллекции (ConcurrentDictionary, например) для MyData
- У меня есть метод, который создает новый экземпляр MyData, используя некоторый ключ.
- Когда мне нужно получить MyData для некоторого ключа, я проверяю, существует ли он в моем хранилище, а затем используйте его из коллекции, иначе он создает новый экземпляр и помещает его в коллекцию.
- У меня есть событие, когда я должен аннулировать кеш. На этом событии я очищаю хранилище.
Недостатки в том, что MyData является одноразовым. Я не знаю, когда следует вызвать метод Dispose. Я не могу вызвать метод Dispose при очистке коллекции от события clear-cache, потому что какой-то поток может мгновенно использовать эти экземпляры MyData.
Какой шаблон выбрать?
Если ваши объекты разделены между многими потребителями, то не имеет значения, кто именно вызывает Dispose; все потребители * должны * сотрудничать, чтобы все было без проблем.Возможно, вы должны быть готовы поймать 'ObjectDisposedException'. – Jon
Являются ли объекты одного типа? –
@ LasseV.Karlsen, какое отличие делает тот же тип, что все они IDissposable? – Liran