C #, ограничение размера ConcurrentQueue и временные рамки - PullRequest
0 голосов
/ 13 июня 2019

Я ищу способ: 1. читать сообщения из ConcurentQueue, ограниченного некоторым размером.2. прочитать не более X сообщения за один промежуток времени.я хочу остановить чтение из Q один раз из двух попаданий, пока другой код не будет выполнен, и снова сделать то же самое.

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

public class FixedSizedQueue<T>

public int Size { get; private set; }

public FixedSizedQueue(int size)
{
    Size = size;
}

public void Enqueue(T obj)
{
    queue.Enqueue(obj);

    while (queue.Count > Size)
    {
        T outObj;
        queue.TryDequeue(out outObj);
    }
}

}

1 Ответ

0 голосов
/ 13 июня 2019

Попробуйте использовать BlockingCollection вместо ConcurrentQueue

https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.blockingcollection-1?view=netframework-4.8

Когда вы пытаетесь добавить еще один элемент в коллекцию, если он заполнен, подождите, пока элемент не будет взят.

...