C# Parallel For循环使用局部变量运行函数,并将结果写入局部变量
我想在C#中使用并行For循环来运行函数并将结果写入变量 这是我正在使用的回路电流:C# Parallel For循环使用局部变量运行函数,并将结果写入局部变量,c#,parallel.for,C#,Parallel.for,我想在C#中使用并行For循环来运行函数并将结果写入变量 这是我正在使用的回路电流: string[][,] PatternTables; for (i = 0; i < BOMs.Length; i++) { PatternTables[i] = BOMAnalysis(Pattern, PatternMatch, BOMs, HeaderIndex);
string[][,] PatternTables;
for (i = 0; i < BOMs.Length; i++)
{
PatternTables[i] = BOMAnalysis(Pattern, PatternMatch, BOMs, HeaderIndex);
}
看看Parallel.For()方法。
使用Parallel.For()方法的代码应该如下所示:
string[][,] PatternTables;
Parallel.For(0, PatternTables.Length,
index =>
{
PatternTables[index] = BOMAnalysis(Pattern, PatternMatch, BOMs, HeaderIndex);
});
参数:
看看这个:
为了保证线程安全,您必须使用锁
Dim locker as new Object();
Parallel.For(0, BMOs.length, index =>{
lock(locker){
//thread safe code
}
});
如果for循环中的整个函数都需要锁定,那么现在使用的常规循环可以正常工作。这是因为锁一次只允许一个线程访问该函数,这违背了并行循环的目的。在循环的所有迭代中,
bomananalysis
都提供了相同的参数,每次都会执行相同的操作。为什么不调用一次bomananalysis
,然后将相同的值分配给数组中的所有元素?(如果bomananalysis
不是,我们需要知道——并行解决方案可能不起作用)不确定问题是什么-如果您不想对表进行并行写入,为什么要对表使用并行?你能澄清这个问题并解释一下你想要解决的确切问题吗?这首先破坏了并行化的整个观点。因此,我的最后一句话是:)这不符合OP的要求,即不并行执行任何工作并按顺序执行所有操作。感谢您的回复。我得到了一个结果,一些循环运行时没有错误,其他循环在处理我的数组大小时有不同的错误范围,因为对象不存在,而且我多次运行相同的东西,我得到一个结果是1717次匹配,另一个结果是1638次匹配,另一个结果是1613次匹配,依此类推。我不知道该怎么办。我刚刚运行了它,我看到“IndexOutofRangeException未被用户破坏”,指向if语句末尾括号上的。我编辑了我的帖子以添加通常发生错误的语句。我一直在运行它,并且在if语句之外发生的错误来自数组中的类似于。resize已被跳过。巫婆的意思是我的七个阵列中有一个比其他阵列短
Dim locker as new Object();
Parallel.For(0, BMOs.length, index =>{
lock(locker){
//thread safe code
}
});