Мне часто приходится обрабатывать очередь элементов, при этом ни один пользователь не может заблокировать очередь, а элементы в очереди должны обрабатываться в определенном порядке. Я часто пишу класс для этого, но думал, что должна быть какая-то общая версия, но не могу ее найти.
Поэтому я ищу класс очереди где я могу указать тип, селектор для разделов и селектор для упорядочивания, чтобы я мог добавлять объекты в очередь, а затем, когда я получаю объекты обратно, я получаю первый объект из следующего раздела, упорядоченный моим спецификатором заказа.
Например, я бы позвонил вот так указано, как разбить и как сортировать очередь:
Код: Выделить всё
var queue = new RoundRobinQueue(
_ => _.UserID,
_ => _.SendDate
);
И после того, как я добавил много сообщений, я могу Parallel.ForEach элементы в моей очереди и обрабатывать их в порядке самой ранней даты отправки< /code> для следующего пользователя. Таким образом, если один пользователь работает медленно, его элементы не будут блокировать очередь, поскольку он получает только один поток, но если есть только один пользователь, он является единственным разделом, поэтому он получает все потоки.
Я перерыл всё, но не смог найти хорошей
универсальной реализации на C# для этого. Есть идеи?
Подробнее здесь:
https://stackoverflow.com/questions/139 ... rted-queue