我需要用C#创建一个代码,该代码将执行一个进程1000次(每次使用不同的命令行参数),并且我希望将并行运行的进程数限制为4。所有其余的将等待,直到至少一个完成,然后再开始下一个。
我该怎么做?
答案 0 :(得分:1)
您在这里有几个选择
一个是使用Parallel
Parallel.For(0, 1000, new ParallelOptions { MaxDegreeOfParallelism = 4 },
i =>
{
//do something
});
另一种方法是使用Semaphore
Semaphore pool = new Semaphore(0, 4);
您将在开始工作之前先致电pool.WaitOne()
,并在工作结束后致电pool.Release()
或者您可以限制线程池的大小(不推荐)
答案 1 :(得分:0)
您可以将ThreadPool中的最大线程数设置为4:
ThreadPool.SetMaxThreads(4, 4);
然后,您可以在ThreadPool中将1000个进程排队:
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。还没测试。