我们希望能够可选地控制并行循环中的“线程”数量,以避免使Web服务(例如)过载。
在Parallel.ForEach循环中指定自定义MaxDegreeOfParallelism是否可行,并根据需要恢复默认值?看起来,零(0)是无效的MaxDegreeOfParallelism值,而我希望它只是表示“忽略”。
换句话说,您能否避免编写此类型的代码?
在Parallel.ForEach循环中指定自定义MaxDegreeOfParallelism是否可行,并根据需要恢复默认值?看起来,零(0)是无效的MaxDegreeOfParallelism值,而我希望它只是表示“忽略”。
换句话说,您能否避免编写此类型的代码?
int numParallelOperations = GetNumParallelOperations();
if (numParallelOperations > 0)
{
ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = numParallelOperations;
Parallel.ForEach(items, options, i =>
{
Foo(i);
});
}
else
{
Parallel.ForEach(items, i =>
{
Foo(i);
});
}
-1
的意思是:MaxDegreeOfParallelism限制了由传递给此ParallelOptions实例的Parallel方法调用运行的并发操作数,如果它是正数,则设置为该值。如果MaxDegreeOfParallelism为-1,则不会对同时运行的操作数量施加限制。 - TaWGetNumParallelOperations
始终返回大于或等于-1的值。这样,您就不需要条件语句了。GetNumParallelOperations
可以从配置文件中读取该值,并在找不到该设置时提供合理的默认值。 - Jim Mischel