如何编写一个带有一个固定参数的Parallel.ForEach和另一个来自集合的参数?

Ign*_*cia 5 .net c# multithreading task-parallel-library

我有一个像这样的foreach方法:

public void Initialize(ClassB fixed)
{
    foreach (ClassA item in itemCollection)
    {
        this.InitializeStock(fixed, item);
    }
}        
Run Code Online (Sandbox Code Playgroud)

我想使用Parallel.ForEach与这个但不确定如何做到这一点.我不能将fixed参数设置为类属性,因为已经从另一个Parallel.ForEach调用了Initialize方法.

提前致谢.

Jon*_*eet 11

目前尚不清楚问题是什么.这应该没问题:

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

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);
}
Run Code Online (Sandbox Code Playgroud)

......但是真的,你宁愿读什么?

  • @SoMoS:你应该学会采用匿名方法; 有_extremely_有用.如果你真的不想,你需要创建一个单独的类,[编译器的方式](http://blog.slaks.net/2011/06/delegates-vs-function-pointers-part -4-c.html)当你使用匿名方法时. (4认同)