【问题标题】:How to run a task in max defined parallel threads using c#.net 4.0如何使用 c#.net 4.0 在最大定义的并行线程中运行任务
【发布时间】:2017-03-09 06:18:56
【问题描述】:

我有 1 种方法,我想在 10 个不同的并行线程中运行,它们都是独立的,彼此之间没有依赖关系,我的问题是,如果我有 100 个项目要处理并且想一次处理 10 个那么如何一次运行10个。我已经创建了一个示例代码,我正在使用Parallel.ForEach,但是我需要设置什么以便它一次运行 10 个线程并假设任何正在运行的任务已经完成然后它应该自动接受新的,所以所有 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 从 DB 中获取 100 条记录,所以在 Parallel.ForEach 我想一次只运行 10 个项目,并且 10 个项目中的任何一个都已完成,因此来自 lstMaterialComposition 的下一个项目应该开始。

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

【问题讨论】:

    标签: c# multithreading task-parallel-library threadpool


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Adil,如果任何正在运行的任务已完成,设置新的 ParallelOptions { MaxDegreeOfParallelism = 10 } 将自动执行下一个任务?
    • 是的@Neeraj Kumar Gupta。
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多