Я собирался сделать этот комментарий, но он слишком длинный.
CodemonkeyKing, похоже, затронул важный момент, хотя, на мой взгляд, недостаточно сильно.
Существует множество критериев, которые вы можете использовать для описания кода. Будет ли оно использоваться в долгосрочном приложении или нет? Winforms приложение или нет? Это серверное или клиентское приложение? библиотека или автономный exe? и т. д.
Мне кажется, что если ваш код будет выполняться в автономном приложении и вы сможете контролировать весь окружающий код, то вы сможете свернуть свой собственный пул потоков, запустить собственные потоки, а также измерить и управлять затратами на запуск потоков, задержка потока и потребление ресурсов. Или вы можете использовать QUWI, но в любом случае это не убьет ваше приложение. Вы можете выбирать.
С другой стороны, если ваш код упакован в виде библиотеки, которую можно использовать на сервере - в ASP.NET, или, возможно, в приложении SQL CLR, или в службе WCF - тогда создавать действительно плохую идею потоки. Вам необходимо использовать QUWI или какой-либо другой механизм, который использует встроенный пул потоков (например, BackgroundWorker). Если он будет использоваться в клиентских приложениях с другими библиотеками, еще раз, QUWI требуется. Представьте, что каждая библиотека, желающая воспользоваться преимуществами многоядерных компьютеров, создала свои собственные потоки. Был бы полный хаос в приложениях, которые использовали больше, чем несколько библиотек. Безудержные темы, все конкурирующие за одни и те же ресурсы. Нет центральной координации между процессорами #threads и #.
Good hygeine требует , чтобы библиотека, независимо от того, будет ли она использоваться в клиентских или серверных приложениях, использовала общий пул потоков, что означает QUWI.
Последнее, что нужно осознать, это;
Управляемый поток - это фоновый поток или поток переднего плана. Фоновые потоки идентичны приоритетным потокам с одним исключением: фоновый поток не поддерживает работу управляемой среды выполнения. Как только все потоки переднего плана были остановлены в управляемом процессе (где файл .exe является управляемой сборкой), система останавливает все фоновые потоки и завершает работу.
Потоки, принадлежащие к пулу управляемых потоков (то есть потоки, свойство IsThreadPoolThread которых имеет значение true), являются фоновыми потоками. Все потоки, которые входят в среду управляемого выполнения из неуправляемого кода, помечаются как фоновые потоки. Все потоки, созданные при создании и запуске нового объекта Thread, по умолчанию являются приоритетными.
Если вы используете поток для мониторинга действия, такого как соединение через сокет, установите для его свойства IsBackground значение true, чтобы поток не препятствовал завершению вашего процесса.
с сайта MSDN .