C # фиксированный размер ConcurrentQueue получить элемент по индексу

Это два разных способа сказать одно и то же.

Док говорит (выделение мое):

переменные, объявленные с помощью var, чьи области пропускаются в их содержащую функцию

, который отличается от выражения

переменных, объявленных с var, чьи области утечки из их содержащей функции

< / BLOCKQUOTE>
0
задан Gilad 18 January 2019 в 22:26
поделиться

1 ответ

Ваша переменная maxsize не синхронизируется между потоками, поэтому существует проблема с потоками. Кроме того, ConcurrentQueue уже имеет функцию ElementAtOrDefault, которая автоматически возвращает null, если индекс не существует.

Я бы обновился, чтобы унаследовать от ConcurrentQueue сам.

public class FixedSizeConcurrentQueue<T> : ConcurrentQueue<T>
{
    public int MaxSize { get; }

    public FixedSizeConcurrentQueue(int maxSize)
    {
        MaxSize = maxSize;
    }

    public new void Enqueue(T obj)
    {
        base.Enqueue(obj);

        while (base.Count > MaxSize)
        {
            T outObj;
            base.TryDequeue(out outObj);
        }
    }

    public T GetElementAt(int index)
    {
        return base.ElementAtOrDefault(index);;
    }
}
0
ответ дан d.moncada 18 January 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: