Библиотека потоков для многопоточной службы Windows

Я ищу хорошую библиотеку, предпочтительно на C#, которую я могу использовать в службе Windows, и она будет обрабатывать все необходимые функции многопоточности.

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

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

Какие-либо предложения?

3 ответа

Решение

Рассмотрите этот проект http://www.codeplex.com/smartthreadpool

Описание Проекта

Smart Thread Pool - это пул потоков, написанный на C#. Он гораздо более продвинутый, чем встроенный пул потоков.NET. Вот список возможностей пула потоков:

  • Количество потоков динамически изменяется в зависимости от нагрузки на потоки в пуле.
  • Рабочие элементы могут возвращать значение.
  • Рабочий элемент может быть отменен.
  • Контекст потока вызывающей стороны используется при выполнении рабочего элемента (ограничено).
  • Использование минимального количества дескрипторов событий Win32, поэтому счетчик дескрипторов приложения не взорвется.
  • Вызывающий может дождаться завершения нескольких или всех рабочих элементов.
  • Рабочий элемент может иметь обратный вызов PostExecute, который вызывается, как только рабочий элемент завершен.
  • Объект состояния, сопровождающий рабочий элемент, может быть удален автоматически.
  • Исключения рабочих элементов отправляются обратно вызывающей стороне.
  • Рабочие элементы имеют приоритет.
  • Группа рабочих элементов.
  • Вызывающая сторона может приостановить запуск пула потоков и группы рабочих элементов.
  • Темы имеют приоритет.
  • Может запускать COM-объекты, которые имеют однопотоковую квартиру.
  • Поддержка Action и Func делегатов.
  • Поддержка WindowsCE (ограниченная)
  • MaxThreads и MinThreads могут быть изменены во время выполнения.
  • Отмена поведения улучшена.

Это немного ненормально, но как насчет.NET Framework? System.Threading Пространство имен имеет все необходимое для этого.

Если вы можете использовать.NET 4 или backport в Rx Framework, библиотека параллельных задач также может немного облегчить эту задачу, но даже без этого в стандартной среде есть все, что вам нужно.

Если вам нужна библиотека планирования, которая поддерживает многопоточность, я использовал это раньше: Quartz.NET

http://quartznet.sourceforge.net/

Другие вопросы по тегам