Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Parallel For循环使用局部变量运行函数,并将结果写入局部变量_C#_Parallel.for - Fatal编程技术网

C# Parallel 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);

我想在C#中使用并行For循环来运行函数并将结果写入变量

这是我正在使用的回路电流:

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
       }
    
     });