1

我想并行运行一部分代码。目前我正在使用 Parallel.For

如何让 10、20 或 40 个线程同时运行

我当前的代码是:

        Parallel.For(1, total, (ii) =>
            {
                doJob(ii);
            });
4

2 回答 2

3

设置MaxDegreeOfParallelism选项:

ParallelOptions opts = new ParallelOptions() { MaxDegreeOfParallelism = 20}

Parallel.For(1, total,opts, (ii) =>
    {
        doJob(ii);
    });

但我鼓励您阅读文档,因为它说明了一些您​​需要考虑的有趣事实,例如:

默认情况下,For 和 ForEach 将使用底层调度程序提供的线程数,因此从默认值更改 MaxDegreeOfParallelism 只会限制将使用多少并发任务。

此外,它还提供了一些指导:

该设置的存在主要是为高级使用提供控制。例如,如果您知道您正在使用的特定算法不会扩展到超过一定数量的核心,您可以设置 MaxDegreeOfParallelism 属性以避免在其他核心上浪费周期。或者,如果您同时运行多个算法并希望手动划分它们可以使用的系统量,您可以为每个算法设置一个 MaxDegreeOfParallelism 值。

于 2013-11-13T01:54:40.190 回答
1

这是你想要的?

Parallel.For(1, total, new ParallelOptions { MaxDegreeOfParallelism = 10 },
  (ii) =>
  {
    doJob(ii);
  });
于 2013-11-13T01:57:07.367 回答