Это слишком общий вопрос, чтобы иметь какой-либо ответ более конкретный, чем «это зависит»: -)
Бывают случаи, когда использование внутренних потоков внутри компонента является полностью допустимым, и бывают случаи, когда нет.Это должно быть решено в каждом конкретном случае.В целом, тем не менее, поскольку потоки значительно усложняют тестирование и сопровождение кода и увеличивают шансы скрытых, труднодоступных ошибок, их следует использовать с осторожностью, только когда есть действительно веская причина их использовать.
Примером законного использования потоков является рабочий поток , где компонент, обрабатывающий событие, запускает действие, выполнение которого занимает много времени (например, длительные вычисления, веб-запрос).или расширенный файловый ввод-вывод), и порождает отдельный поток для выполнения работы, так что элемент управления может быть немедленно возвращен в интерфейс для обработки дальнейшего ввода данных пользователем.Без рабочего потока пользовательский интерфейс в течение долгого времени был бы полностью не отвечающим, что обычно раздражало бы пользователей.
Другой пример - длительный расчет / процесс, который хорошо подходит для параллельного выполнения, то есть состоит из множества меньшихсамостоятельные задачи более или менее одинакового размера.Если существуют строгие требования к производительности, имеет смысл выполнять отдельные задачи одновременно, используя пул рабочих потоков.Многие языки предоставляют поддержку высокого уровня для таких конструкций.
Обратите внимание, что компоненты, как правило, могут свободно выделять и использовать любые другие виды ресурсов и, таким образом, наносят ущерб бесчисленным множеством других способов - вы когда-нибудь беспокоились о том, что компонент съедаетвся память, исчерпание доступных файловых дескрипторов, резервирование портов и т. д.?Многие из них могут вызвать гораздо больше проблем в глобальном масштабе в системе, чем порождение дополнительных потоков.