C# ParallelOptions.MaxDegreeOfParallelism不执行任何操作

C# ParallelOptions.MaxDegreeOfParallelism不执行任何操作,c#,task-parallel-library,parallel.foreach,C#,Task Parallel Library,Parallel.foreach,使用about ParallelOptions.MaxDegreeOfParallelism上的代码,我尝试了以下操作 ParallelOptions po = new ParallelOptions { MaxDegreeOfParallelism = 2 }; Parallel.ForEach(files, (currentFile) => { String filename = System.IO.Path.GetFileName(currentFile); Bitmap

使用about ParallelOptions.MaxDegreeOfParallelism上的代码,我尝试了以下操作

ParallelOptions po = new ParallelOptions {
  MaxDegreeOfParallelism = 2
};
Parallel.ForEach(files, (currentFile) => {
  String filename = System.IO.Path.GetFileName(currentFile);
  Bitmap bitmap = new Bitmap(currentFile);
  bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
  bitmap.Save(Path.Combine(newDir, filename));
  Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId);
});
但是,查看正在输出的线程ID,我可以看到,设置MaxDegreeOfParallelism与不设置MaxDegreeOfParallelism没有任何区别。查看我的CPU监视器,我可以看到所有内核都在运行,即使我将MaxDegreeOfParallelism设置为2


我是不是没抓住要点?我以为这样做是为了限制线程的数量?

它看起来不像是将
po
传递到
Parallel.ForEach
,所以它只使用默认值。使用
Parallel.ForEach
,允许您将
Parallel选项
传递到,可能是以下选项:

Parallel.ForEach(files, po, (currentFile) => {

看起来您没有将
po
传递到
Parallel.ForEach
,因此它只使用默认值。使用
Parallel.ForEach
,允许您将
Parallel选项
传递到,可能是以下选项:

Parallel.ForEach(files, po, (currentFile) => {

您没有使用在循环中定义的并行选项。您必须使用不同的重载:

Parallel.ForEach<TSource> Method (IEnumerable<TSource>, ParallelOptions, Action<TSource>)

您没有使用在循环中定义的并行选项。您必须使用不同的重载:

Parallel.ForEach<TSource> Method (IEnumerable<TSource>, ParallelOptions, Action<TSource>)

我确实对此感到好奇,但我看到的MaxDegreeOfParallelism的唯一示例没有说明如何在循环中使用它,所以我愚蠢地认为它可能设置了一些静态属性。当我创建ParallelOptions的实例时,这看起来很奇怪!ThanksI确实对此感到好奇,但我看到的MaxDegreeOfParallelism的唯一示例没有说明如何在循环中使用它,所以我愚蠢地认为它可能设置了一些静态属性。当我创建ParallelOptions的实例时,这看起来很奇怪!谢谢Jen的比你的早2分钟来,我会记下这是答案,但无论如何谢谢,因为你的答案同样清楚。请看我的评论,为什么我错过了这个相当明显的一点@Avrohmyisroel事实恰恰相反,vcsjones击败了我;-)@詹斯,哎呀,你说得对。在这种情况下,我会将此标记为答案。谢谢你们两个!由于Jen的答案比你的早2分钟到达,我将把它作为答案,但无论如何还是要感谢你,因为你的答案同样清楚。请看我的评论,为什么我错过了这个相当明显的一点@Avrohmyisroel事实恰恰相反,vcsjones击败了我;-)@詹斯,哎呀,你说得对。在这种情况下,我会将此标记为答案。谢谢你们两个!