У меня есть приложение Asp. Net core 3.1, и я хотел бы использовать keyedCollection:
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.synchronizedkeyedcollection-2?view=netframework-4.8
Это код для этого списка;
/// <summary>
/// A collection of leases. Implements <see cref="KeyedCollection{TKey,TItem}"/> which is a dictionary-list hybrid.
/// </summary>
public class LeaseInfoCollection : KeyedCollection<Guid, LeaseInfo>
{
#region Construction and Destruction
/// <inheritdoc />
public LeaseInfoCollection()
{
}
/// <inheritdoc />
public LeaseInfoCollection(IEqualityComparer<Guid> comparer)
: base(comparer)
{
}
/// <inheritdoc />
public LeaseInfoCollection(IEqualityComparer<Guid> comparer, int dictionaryCreationThreshold)
: base(comparer, dictionaryCreationThreshold)
{
}
#endregion
#region Overrides of KeyedCollection<string,LeaseInfo>
/// <inheritdoc />
protected override Guid GetKeyForItem(LeaseInfo item)
{
return item.LeaseId;
}
#endregion
}
Как мы видим, LeaseId
типа Guid
встроено в объект аренды. Проблема в том, что я хотел бы, чтобы этот список был:
- Периодически просматривался для удаления элементов на основе условия
- Добавлял новые элементы относительно часто
- LookedUp и возвращать элементы почти так же часто, как 2.
Шаг 1, скорее всего, будет выполняться во время потока, 2 и 1 все управляются задачами Threadpool. Поэтому мне нужен какой-то механизм синхронизации для списка.
Я могу свернуть свой собственный и, возможно, сделать что-нибудь с блокировкой чтения / записи (думаю об использовании библиотеки asyncEx), но я вижу версии. net где есть еще SynchronisedKeyedCollection
. Однако я не вижу такой версии в. net core 3.1.
Поэтому есть ли готовые альтернативы для KeyedCollection
, которые я мог бы использовать для. net core 3.1, которые совместимы с async-await
?