Структура очереди с жестким порогом - PullRequest
3 голосов
/ 06 декабря 2010

Есть ли в .NET коллекция типов очередей, позволяющая выталкивать элементы из очереди при достижении емкости очереди?

Ответы [ 2 ]

3 голосов
/ 06 декабря 2010

Довольно тривиально сделать это самостоятельно, просто вызвав Dequeue, когда счетчик превысит ваш лимит после вызова Add (). На ум приходит метод расширения.

2 голосов
/ 06 декабря 2010

Я бы предложил создать новый класс, а не подклассовую очередь, поскольку класс очереди ограниченной длины не должен передаваться в код, который может вызывать старый метод enqueue.Есть ряд логических вещей, которые может сделать очередь, если пуш происходит при заполнении:

  1. Бросить исключение при нажатии
  2. Дождаться чтения элемента
  3. Удалить самый старый элемент
  4. Отбросить новый элемент
  5. Недействительная очередь, так что она вызовет исключение при следующем чтении, но вернется из толчка;дальнейшие толчки станут бездействующими.

Может быть полезно создать наследуемый базовый класс, а затем создать производные классы, которые реализуют определенные поведения.Таким образом, методы, которые заботятся о проблемном сценарии, могут требовать класс, который обещает обрабатывать его правильно.Обратите внимание, что последний сценарий может показаться странным, но бывают случаи, когда он подходит, например, обработчик событий помещает данные в очередь для обработки какой-либо другой задачи.Если очередь достаточно велика, чтобы она никогда не переполнялась, но задача чтения блокируется, может быть нежелательно, чтобы такая блокировка возвращалась отправителю события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...