Pet*_*erX 3 c# parallel-processing multithreading task-parallel-library
我们希望可选地控制并行循环中"线程"的数量,以避免压倒Web服务(例如).
是否可以MaxDegreeOfParallelism在Parallel.ForEach循环上指定自定义,还可以根据需要恢复为默认值?看似零(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);
});
}
Run Code Online (Sandbox Code Playgroud)
你的意思-1是按照MSDN:
MaxDegreeOfParallelism将通过此ParallelOptions实例传递的并行方法调用运行的并发操作数限制为设置值(如果为正数).如果MaxDegreeOfParallelism为-1,则对并发运行的操作数没有限制.
您可以像这样控制大致的线程数:
// use only (ca) one kernel:
int degreeOfParallelism = 1;
// leave (ca) one kernel idle:
int degreeOfParallelism = Environment.ProcessorCount - 1;
// use (ca) half of the kernels:
int degreeOfParallelism = Environment.ProcessorCount > 1 ?
Environment.ProcessorCount / 2 : 1;
// run at full speed:
int degreeOfParallelism = - 1;
var options = new ParallelOptions();
options.MaxDegreeOfParallelism = degreeOfParallelism;
Parallel.For(0, x, options, y =>
//...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13513 次 |
| 最近记录: |