Использование кода из следующей статьи, я реализовал собственную ThreadPool: http://www.developer.com/net/article.php/3783756Как решить эту конкретную проблему потоковую
Это то, что я хочу добиться: Срабатывает через таймер, служба должна запрашивать базу данных каждые 5 секунд для выполнения новых заданий. Работа - это в основном только информация о программе командной строки, которая должна запускаться с аргументами.
До 50 или более из этих программ должны быть выполнены одновременно. Программа может работать через пару секунд, минут и часов. Служба должна постоянно контролировать эти программы, т. Е. Она должна иметь возможность убивать программу по запросу, например.
Используя реализацию ThreadPool сверху, я начинаю ставить в очередь программы, которые будут выполняться, и мог видеть, когда служба действительно их выполнила. Пока нет проблем. Однако механизм здесь работает следующим образом:
ThreadPool создает рабочий рабочий стол и запускает его. Всякий раз, когда программа ставится в очередь, рабочий-участник замечает это и вызывает делегата, который по существу создает экземпляр объекта System.Diagnostics.Process и запускает внешнюю программу. Затем поток завершит свою работу и сможет начать дальнейшие программы. Однако ... когда программа nores не запускается, таймер бездействия заставляет threadmanager убивать поток и, таким образом, прерывать начатый процесс.
Это не то, что мне нужно. У кого-нибудь есть идея, как справиться с описанным мной сценарием лучше?
Hm. Фактически это был запрос клиента работать с потоками (что он и сделал, а теперь хочет, чтобы мы это сделали в .NET). Теперь, когда я сделал некоторый опыт в этой «паршивой» реализации threadpool, я заметил, что это не имеет никакого смысла. Поскольку запуск внешней программы уже порождает новые потоки, которые работают параллельно. Кажется, что сборка, управляющая процессами, кажется более правильной ... – Mephisztoe