Исходный код вики Tools.Collections

Версия 9.1 от Alexandr Fokin на 2020/09/19 19:20

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