Я не знаю, что существует общий «правильный ответ» для всех - это будет зависеть от вашего индивидуального варианта использования.
Вот некоторые вещи, которые следует учитывать, если вы решите пойти по пути ThreadPool.
Есть ли что-то, что вы можете поддерживать при обработке сообщений «Не в порядке» / «Параллельная обработка»?
Если Socket A получает сообщения 1, 2 и 3 в быстрой последовательности - они могут в конечном итоге обрабатываться одновременно или не в порядке.
.NET имеет пулы потоков для каждого ЦП, если один ЦП не работает, он может «красть» задачи у других ЦП. Это может означать, что ваши сообщения могут быть выполнены в произвольном порядке.
Не забудьте подумать о том, что может сделать обработка не по порядку для клиента - например, если они отправляют три сообщения, требующие ответов, отправка ответов не по порядку может быть проблемой.
Если вам нужно обрабатывать каждое сообщение по порядку, вам, вероятно, придется реализовать свой собственный пул потоков.
Вам нужно беспокоиться о возможном отказе в обслуживании?
Если один сокет внезапно отправляет рой данных, принятие всего этого для обработки может засорить внутренние очереди и память. Возможно, вам придется ограничить количество необработанных данных, которые вы принимаете.