Исходный код вики ManagetLinkCollection

Версия 3.1 от Alexandr Fokin на 2020/06/14 12:09

Последние авторы
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