Если под «Потоками» вы подразумеваете явное использование класса System.Threading.Thread для создания, настройки и запуска своих собственных потоков, то ответ заключается в том, что выполнение этой задачи требует больше работы с вашей стороны, включает больше циклов ЦП, чем просто извлечение потока из пула потоков (что и делают другие методы), но это дает вам большую гибкость, поскольку позволяет указывать приоритет потока и ряд других характеристик, которые вам не позволяют использование потоков пула потоков.
Подход «Пул потоков» более уместен, когда необходимое количество потоков неизвестно во время разработки. Изначально пул содержит небольшое количество потоков, «готовых» к вам для их вызова. Он может динамически создавать новые потоки по запросу и управляет созданием, координацией и удалением неиспользуемых потоков для вас. Есть три механизма, которые вы можете использовать для доступа и использования потоков из пула.
- Использование Delegate.BeginInvoke () (наиболее распространенный метод)
- Использование таймеров (несколько вариантов)
- System.Threading.ThreadPool предоставляет несколько других функций (класс BackGroundWorker, QueueUserWorkItem () и т. Д.).