Есть ли альтернатива. net core 3.1 для синхронизированной коллекции KeyedCollection (совместим с async / await) - PullRequest
0 голосов
/ 08 мая 2020

У меня есть приложение 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 встроено в объект аренды. Проблема в том, что я хотел бы, чтобы этот список был:

  1. Периодически просматривался для удаления элементов на основе условия
  2. Добавлял новые элементы относительно часто
  3. LookedUp и возвращать элементы почти так же часто, как 2.

Шаг 1, скорее всего, будет выполняться во время потока, 2 и 1 все управляются задачами Threadpool. Поэтому мне нужен какой-то механизм синхронизации для списка.

Я могу свернуть свой собственный и, возможно, сделать что-нибудь с блокировкой чтения / записи (думаю об использовании библиотеки asyncEx), но я вижу версии. net где есть еще SynchronisedKeyedCollection. Однако я не вижу такой версии в. net core 3.1.

Поэтому есть ли готовые альтернативы для KeyedCollection, которые я мог бы использовать для. net core 3.1, которые совместимы с async-await?

...