如何使用一个固定参数和集合中的另一个参数编写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调用。
提前谢谢。
问题出在哪里还不清楚。这应该没问题:
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);
});
}