Создается впечатление, что вы создаете сервер, который будет обслуживать тысячи одновременных запросов, каждый из которых выполняется в течение нескольких минут или нескольких часов.
Как правило, рабочие нагрузки потоков достаточно короткие, чтобы их можно было выполнить максимум за несколько секунд.,Если дольше, вы начнете загружать ресурсы сервера и серьезно повлиять на масштабируемость вашего сервера.Наличие десятков тысяч потоков, блокирующих долгосрочные операции, или одновременное выполнение этих длительных операций определенно убьет вашу масштабируемость.
Не уверен, сколько процессорного времени вы тратите на каждую длительную работу.Это повлияет на ваш дизайн, например:
Если каждая длительная работа в основном блокирует ввод-вывод, вы можете использовать один поток для ожидания на перекрывающемся порте ввода-вывода или завершения ввода-вывода, а затем активировать новыйпотоки для обработки завершенных операций ввода-вывода (до заданного ограничения).Для обслуживания ожидающих соединений вам потребуется ограниченное количество потоков.
Если каждая длительная операция ожидает завершения других операций, рассмотрите Windows Workflow Foundation.
Если каждая длинная операция-производительная операция потребляет процессор, вы не хотите, чтобы слишком много из них работали одновременно, иначе это будет перегружать ваш сервер.В этом случае используйте MSMQ и / или TPL для постановки в очередь задач и убедитесь, что одновременно выполняется только несколько из них.
Во всех этих случаях кажется, что клиентское соединение открыто.Худшее, что нужно сделать, это сохранить блокировку одного потока для каждого соединения.Вам потребуется реализовать стратегии пула потоков, чтобы использовать только ограниченное количество потоков для обслуживания всех незавершенных соединений.