maxDegreeOfParallelism是否会阻止其他所有Parallel.ForEach执行新任务?

时间:2019-09-02 06:32:08

标签: c# task parallel.foreach

如果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循环不调用更多操作。

此外,如果还有另一种方法,如果有人可以提供帮助,我将不胜感激。

0 个答案:

没有答案