在循环中一次处理X个线程的最佳方法?

时间:2017-06-01 22:09:20

标签: c# multithreading parallel-processing

我为数百台服务器启动远程进程,并且希望一次运行大约3个线程。所以首先我想排队3个线程并让它们各自运行processData()函数,然后forloop中的其余项目必须等到队列打开才能运行该函数所以我可以在任何给定时间继续并行处理3个线程直到完成。这样做的最佳方法是什么?

foreach (ServerData serv in servers) { 
  processData(...)
}

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Parallel.ForEach功能。它还包含一些选项,用于自定义将同时运行的线程数。如果您没有指定任何内容,它将根据可用的可用内存/ CPU处理容量创建线程。

示例:

Parallel.ForEach(servers, (serv) => { //processData function... });

如果你想同时只运行3个线程:

Parallel.ForEach(servers, new ParallelOptions { MaxDegreeOfParallelism = 3 }, (serv) => { //processData function... });

有关Parallel.ForEach的更多信息,请访问:https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx