2010-04-07 5 views
0

Я хочу написать приложение, которому нужна очередь задач. Я должен иметь возможность добавлять задачи в эту очередь, и эти задачи могут завершиться асинхронно (и должны быть удалены из этой очереди, как только они будут завершены)Простая асинхронная структура данных очереди в C#/mono

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

Структура данных также должна предоставлять список элементов в очереди в любое время.

Интерфейс LINQ для управления этой очередью также будет желательным.

Поскольку это очень распространенное требование для многих приложений (по крайней мере, в моем личном наблюдении), я хочу знать, есть ли какие-либо стандартные структуры данных, которые доступны как часть библиотеки C#, вместо того, чтобы писать что-то с нуля ,

Любые указатели?

+0

Почему бы не переместить полные элементы в * второй * ковш (возможно, только синхронизированный список) после завершения? Это будет держать ожидающее ведро красивым и маленьким. Кроме того, то, что вы описываете, не является строго очередью ... –

+0

Да. Это не очередь. Но я не знаю, как назвать эту структуру данных. Мне нужна структура данных TaskManager. Есть ли встроенные библиотеки C#, которые могут помочь в достижении этого? –

ответ

0

Кажется, что вы объединяете структуру данных и задачу asynch, которые она предназначена для отслеживания. Вы уверены, что они должны быть одинаковыми?

Действительно ли ThreadPool.QueueUserWorkItem не удовлетворяет выполняемым задачам asynch? Вы можете сохранить свою собственную структуру, полученную из List<TaskStatus> или HashSet<TaskStatus>, чтобы отслеживать результаты, и вы можете предоставить удобные методы для очистки завершенных элементов, получения отложенных элементов и т. Д.

+0

ThreadPool для меня достаточно для элементов очереди. Как вы правильно упомянули во втором искусстве своего комментария, я могу написать свой собственный класс с помощью этих методов удобства. Но хотелось знать, есть ли в библиотеке C# несколько классов, предлагающих эту функциональность. –

Смежные вопросы