Как ограничить количество параллельных процессов, выполняемых из программы на C #? - PullRequest
1 голос
/ 23 апреля 2019

Мне нужно создать код на C #, который будет выполнять один процесс 1000 раз (каждый раз с разными аргументами командной строки), и я хочу ограничить количество процессов, которые работают параллельно, до 4. Таким образом,что все остальные будут ждать, пока хотя бы один не закончил, а затем следующий, чтобы начать.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

у вас есть пара вариантов здесь

нужно использовать Параллель

Parallel.For(0, 1000, new ParallelOptions { MaxDegreeOfParallelism = 4 },
  i =>
  {
    //do something
  });

еще один должен использовать Семафор

Semaphore pool = new Semaphore(0, 4);

Вы бы позвонили pool.WaitOne() до запуска работника и pool.Release(), когда ваш работник закончит работу

Или вы можете ограничить размер пула потоков (не рекомендуется)

0 голосов
/ 23 апреля 2019

Вы можете установить максимальное количество потоков в ThreadPool равным 4:

ThreadPool.SetMaxThreads(4, 4);

Затем вы можете поставить в очередь 1000 процессов в ThreadPool:

        for (int i = 0; i < 1000; i++)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(LaunchProcess));
        }

Вотметод, который будет работать в фоновом потоке и запустить ваш процесс.Он использует WaitForExit (), чтобы обеспечить завершение процесса до завершения потока.

    static void LaunchProcess(object o)
    {
        var p = new Process();
        p.StartInfo = new ProcessStartInfo("myprocess.exe");
        p.Start();
        p.WaitForExit(); // Critical to wait here for the process to finish
    }

Это должно ограничить число активных процессов до 4, я полагаю.Не проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...