如何使用一个固定参数和集合中的另一个参数编写Parallel.ForEach

本文关键字:参数 集合 另一个 ForEach Parallel 一个 何使用 | 更新日期: 2023-09-27 18:25:22

我有一个foreach方法,如下所示:

public void Initialize(ClassB fixed)
{
    foreach (ClassA item in itemCollection)
    {
        this.InitializeStock(fixed, item);
    }
}        

我想将Parallel.ForEach与此一起使用,但不确定如何执行。我无法将固定参数设置为类属性,因为Initialize方法已经从另一个Parallel.ForEach调用。

提前谢谢。

如何使用一个固定参数和集合中的另一个参数编写Parallel.ForEach

问题出在哪里还不清楚。这应该没问题:

public void Initialize(ClassB fixed)
{
    Parallel.ForEach(itemCollection, item =>
    {
        this.InitializeStock(fixed, item);
    });
}

lambda表达式将捕获fixed变量,以便在调用InitializeStock时使用它。

编辑:如果你真的不想要lambda表达式:

private class ClassBHolder
{
    private readonly ClassB fixed;
    // Foo is the class which has the Initialize method
    private readonly Foo container;
    internal ClassBHolder(ClassB fixed, Foo container)
    {
        this.fixed = fixed;
        this.container = container;
    }
    internal void Execute(ClassA item)
    {
        container.InitializeStock(fixed, item);
    }
}
public void Initialize(ClassB fixed)
{
    ClassBHolder holder = new ClassBHolder(fixed, this);
    Parallel.ForEach(itemCollection, holder.Execute);
}

但实际上,你更愿意读哪本?

这里试试这个:

public void Initialize(ClassB fixed)
{
    Parallel.ForEach(itemCollection, new ParallelOptions() { MaxDegreeOfParallelism = 100 },
                (item, i, j) =>
                     {
                         this.InitializeStock(fixed, item);
                     });
}