Parallel.For / Foreach线程重用C#

时间:2016-12-25 06:58:21

标签: c# multithreading parallel.foreach

有没有办法重用#include <stdio.h> #include <dirent.h> int main() { DIR* proc = opendir("/proc"); struct dirent* ent; int count = 0; if(proc == NULL) { perror("opendir(/proc)"); return 1; } while(ent = readdir(proc)) { if(!isdigit(*ent->d_name)) continue; count++; //if directory name is number then increment the count. } closedir(proc); printf("Number of Processes=%d\n",count); return 0; } 循环的后续调用中使用的线程?我很想做,因为我知道创建线程可能会很昂贵。

这就是我想做的事情:

Parallel.ForEach

有可能吗?

注意:我不能将外部循环平行化(在&#39; i&#39;之间的硬依赖性)

1 个答案:

答案 0 :(得分:2)

Parallel.ForEach是TPL的一部分。默认情况下,负责将工作项排队到线程上的TaskSceduler将使用ThreadPool。

  

TaskScheduler类的实例表示任务调度程序。一个   任务调度程序确保最终执行任务的工作。   默认任务计划程序基于.NET Framework 4线程   pool,它为负载平衡线程提供工作窃取   注入/退出以获得最大吞吐量,并且总体良好   性能。对大多数情况来说应该足够了。该   TaskScheduler类也可作为所有人的扩展点   可定制的调度逻辑。这包括如何做的机制   安排执行任务,以及计划任务应该如何   暴露给调试器。如果您需要特殊功能,可以   创建自定义计划程序并为特定任务或查询启用它。