Библиотека потоков для многопоточной службы 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