如何使用 c#.net 4.0 运行 在最大定义的并行线程中执行任务

How to run a task in max defined parallel threads using c#.net 4.0

我有 1 个方法想 运行 在 10 个不同的并行线程中,所有线程都是独立的,彼此之间没有依赖关系,我的问题是如果我有 100 个项目要处理并且想要一次处理 10 个,然后如何在 运行 中一次处理 10 个。我已经在使用 Parallel.ForEach 的地方创建了一个示例代码,但是我需要设置什么才能一次 运行 10 个线程并假设任何 运行ning 任务已经完成然后它应该自动采用新的,所以所有 10 个线程都应该忙碌,直到并且除非所有项目都没有完成。

    private void StartAccuracyCalculator()
    {
        List<MaterialComposition> lstMaterialComposition = DataHelper.GetMaterialComposition();

        Parallel.ForEach(lstMaterialComposition, composition =>
        {
            try
            {
                CalculateAccuracy(composition);
            }
            catch (Exception ex)
            {
                //LogException(ex)
            }
        });

    }


    private void CalculateAccuracy(MaterialComposition composition)
    {
        /// actual process to perform 
    }

假设 lstMaterialComposition 从数据库中获取 100 条记录,所以在 Parallel.ForEach 中我只想 运行 一次只处理 10 项,并且 10 项中的任何一项都已完成,因此下一项来自 lstMaterialComposition 应该开始了。

请建议 Parallel.ForEach 是否可行,或者是否有其他选择?

您可以使用ParallelOptions.MaxDegreeOfParallelism属性来限制任务数量。

MaxDegreeOfParallelism MaxDegreeOfParallelism 属性 影响通过传递给此 ParallelOptions 实例的并行方法调用的并发操作数 运行。正 属性 值将并发操作数限制为设置值。如果为-1,则表示并发运行ning个数没有限制

Parallel.ForEach(
    lstMaterialComposition,
    new ParallelOptions { MaxDegreeOfParallelism = 10 },
    composition => { 
            try
            {
                CalculateAccuracy(composition);
            }
            catch (Exception ex)
            {
                //LogException(ex)
            }
     }
);