如何限制从 C# 程序执行的并行进程数?

我需要在 C# 中创建一个代码,它将执行单个进程 1000 次(每次使用不同的命令行参数),并且我想将并行运行的进程数限制为 4 个。这样一来,所有休息将等到至少一个完成,然后下一个开始。

我怎样才能做到这一点?


翻过高山走不出你
浏览 118回答 2
2回答

aluckdog

你在这里有几个选择一种是使用并行Parallel.For(0, 1000, new ParallelOptions { MaxDegreeOfParallelism = 4 },   i =>   {       //do something   });另一个是使用信号量Semaphore pool = new Semaphore(0, 4);你会pool.WaitOne()在启动工作人员之前和pool.Release()你的工作人员完成时打电话或者您可以限制线程池的大小(不推荐)

翻翻过去那场雪

您可以将 ThreadPool 中的最大线程数设置为 4:ThreadPool.SetMaxThreads(4, 4);然后就可以把ThreadPool中的1000个进程排队了:&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < 1000; i++)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPool.QueueUserWorkItem(new WaitCallback(LaunchProcess));&nbsp; &nbsp; &nbsp; &nbsp; }这是将在后台线程上运行并运行您的进程的方法。它使用 WaitForExit() 来确保进程在线程完成之前完成。&nbsp; &nbsp; static void LaunchProcess(object o)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var p = new Process();&nbsp; &nbsp; &nbsp; &nbsp; p.StartInfo = new ProcessStartInfo("myprocess.exe");&nbsp; &nbsp; &nbsp; &nbsp; p.Start();&nbsp; &nbsp; &nbsp; &nbsp; p.WaitForExit(); // Critical to wait here for the process to finish&nbsp; &nbsp; }我相信,这应该会将活动进程的数量限制为 4 个。没有测试过。
打开App,查看更多内容
随时随地看视频慕课网APP