如果Parallel.ForEach
有两个maxDegreOfParallelism = 3
循环,那么它们都只能运行3个线程吗?
OR
我们可以将生成的线程数限制为特定数量吗?
我有一个需要两次Parallel.ForEach
的代码,他们只有一个task.Start()调用。
我的问题是,如果我在两个Parallel.ForEach
循环中都指定maxDegreeOfParallelism = 3
,这是否普遍适用?也就是说,如果已经有3个线程正在运行,其他Parallel.ForEach
是否不会调用操作?
这只是一个演示类型代码,不是真实的东西。由于某些原因,我不想共享实际功能。仅subTasks.Add(() => {})
部分不同,其余部分相同。
async static void myFunction()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
int m = i + 1;
List<Task> subTasks = new List<Task>();
for (int j = 0; j < 3; j++)
{
int n = j + 1;
subTasks.Add(new Task(async () => {
//the actual work i want done will go in here
Console.WriteLine("Executing Task " + m + "." + n);
await Task.Delay(5000);
Console.WriteLine("Completed Task " + m + "." + n);
}));
}
tasks.Add(new Task(async () => {
Console.WriteLine("Executing Task " + m);
Parallel.ForEach(subTasks, new ParallelOptions() { MaxDegreeOfParallelism = 3 },
subTask => {
subTask.Start();
});
await Task.WhenAll(subTasks);
Console.WriteLine("Completed Task " + m);
}));
}
Parallel.ForEach(tasks, new ParallelOptions() { MaxDegreeOfParallelism = 3 }, task => { task.Start(); });
await Task.WhenAll(tasks);
}
如果总共有3个线程正在运行,我希望Parallel.ForEach
循环不调用更多操作。
此外,如果还有另一种方法,如果有人可以提供帮助,我将不胜感激。