为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻过高山走不出你 2022-12-24 14:42:06
我需要在 C# 中创建一个代码,它将执行单个进程 1000 次(每次使用不同的命令行参数),并且我想将并行运行的进程数限制为 4 个。这样一来,所有休息将等到至少一个完成,然后下一个开始。我怎样才能做到这一点?
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

你在这里有几个选择

一种是使用并行

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

另一个是使用信号量

Semaphore pool = new Semaphore(0, 4);

你会pool.WaitOne()在启动工作人员之前和pool.Release()你的工作人员完成时打电话

或者您可以限制线程池的大小(不推荐)


查看完整回答
反对 回复 2022-12-24
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

您可以将 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 个。没有测试过。


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信