Исходный код вики ManagetLinkCollection
Версия 3.1 от Alexandr Fokin на 2020/06/14 12:09
Последние авторы
author | version | line-number | content |
---|---|---|---|
1 | Репозиторий: [[git repo>>https://git.denhome.ru/Repository/Detail/51601bfd-6f2c-40d8-88bb-f2724b294431]] | ||
2 | |||
3 | Данный проект реализует 2 коллекции. | ||
4 | Коллекцию представляют из себя Key Value хранилище, являются потокобезопасными. (В основе лежит ConcurrentDictionary) | ||
5 | |||
6 | **1) LinkStorage** | ||
7 | Интерфейс: | ||
8 | |||
9 | AddLink | ||
10 | TKey key - ключ | ||
11 | Func<TKey, TData> addFactory - фабрика для нового значения | ||
12 | Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения | ||
13 | |||
14 | Если по ключу нет записи, то | ||
15 | добавить запись | ||
16 | счетчик записи = 1 | ||
17 | вызвать addFactory(если не null) и заполнить value.Data | ||
18 | Иначе если по ключу есть запись, то | ||
19 | Увеличить счетчик на 1 | ||
20 | вызвать updateFactory(если не null) и обновить value.Data | ||
21 | |||
22 | |||
23 | RemoveLink | ||
24 | TKey key - ключ | ||
25 | Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения | ||
26 | |||
27 | Уменьшить счетчик на 1 | ||
28 | вызвать updateFactory(если не null) и обновить value.Data | ||
29 | Если значение счетчика <= 0 | ||
30 | То удалить запись | ||
31 | |||
32 | |||
33 | **2) ObjectLinkStorage** | ||
34 | Данная коллекция оборачивает LinkStorage, добавляя к контракту сущность объекта, ссылающегося на запись. | ||
35 | Все объекты, ссылающиеся на запись храняться в ImmutableHashSet. | ||
36 | |||
37 | При AddLink, помимо увеличения счетчика в HashSet записи добавляется ссылающийся объект. | ||
38 | При RemoveLink, помимо уменьшения счетчика из HashSet удаляется ссылающийся объект. | ||
39 | |||
40 | Ссылки: | ||
41 | https://wiki.denhome.ru/bin/view/Разработка/NET/C%23/ConcurrentDictionary/ | ||
42 | https://stackoverflow.com/questions/39679779/how-to-achieve-remove-if-functionality-in-net-concurrentdictionary | ||
43 |