如何对我的代码使用带有分区局部变量的Parallel.ForEach循环 [英] How to use Parallel.ForEach loop with partition-local variables for my code

查看:55
本文介绍了如何对我的代码使用带有分区局部变量的Parallel.ForEach循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查看我的代码。其中有3个Parallel.ForEach。我想要第一个内部Parallel.ForEach将执行以填充
brokerRowWeightageRowNumber  然后最后它会将行号传递给阻止我将填充
ConsensusRowWeightageRowNumber ,然后执行最后一次嵌套的Parallel.ForEach将填充
QcRowWeightageRowNumber

see my code. which has 3 Parallel.ForEach. i want when first inner Parallel.ForEach will execute to populate brokerRowWeightageRowNumber   then at end it will pass row number to block where i will populate ConsensusRowWeightageRowNumber and after that last nested Parallel.ForEach will execute which will populate QcRowWeightageRowNumber

如何使用带有分区局部变量的Parallel.ForEach循环实现我的场景。
谢谢

how to achieve for my scenario using Parallel.ForEach loop with partition-local variables. thanks

Parallel.ForEach(OrderWiseLineItem, data =>
                    {
                        // string Li = data1.LineItem;
                        string section = data.Section;
                        string Li = data.Lineitem;

                        if (!String.IsNullOrEmpty(Li) && !String.IsNullOrEmpty(section))
                        {
                            Parallel.ForEach(DistinctBroker, broker =>
                            {
                                    // for broker row .... weightage 1 (no color)

                                    Interlocked.Increment(ref rowNumber);
                                    brokerRowWeightageRowNumber = new WeightageRowNumber();
                                    brokerRowWeightageRowNumber.Section = section;
                                    brokerRowWeightageRowNumber.Lineitem = Li;
                                    brokerRowWeightageRowNumber.Broker = broker;
                                    brokerRowWeightageRowNumber.RowNumber = rowNumber;
                                    brokerRowWeightageRowNumber.Weightage = (int)RowWeightage.BrokerRow;

                                    lock (_lock)
                    		    {
                                        WeightageRowNumberall.Add(brokerRowWeightageRowNumber);
                                    }
                            }

                                Interlocked.Increment(ref rowNumber);
                                ConsensusRowWeightageRowNumber = new WeightageRowNumber();
                                ConsensusRowWeightageRowNumber.Section = section;
                                ConsensusRowWeightageRowNumber.Lineitem = Li;
                                ConsensusRowWeightageRowNumber.Broker = "";
                                ConsensusRowWeightageRowNumber.RowNumber = rowNumber;
                                ConsensusRowWeightageRowNumber.Weightage = (int)RowWeightage.ConsenSusRow;

                                lock (_lock)
                                {
                                    WeightageRowNumberall.Add(ConsensusRowWeightageRowNumber);
                                }


                            if (qcTrueDistin.Any(x => x.TabName.Equals(section) && x.StandardLineItem.Equals(Li)))
                            {
                                // for QC Check row .... weightage 3, if any  (yellow color)
                                Parallel.ForEach(DistinctBroker, broker =>
                                {

				    Interlocked.Increment(ref rowNumber);
				    QcRowWeightageRowNumber = new WeightageRowNumber();

				    QcRowWeightageRowNumber.Section = section;
				    QcRowWeightageRowNumber.Lineitem = Li;
				    QcRowWeightageRowNumber.Broker = broker;
				    QcRowWeightageRowNumber.RowNumber = rowNumber;
				    QcRowWeightageRowNumber.Weightage = (int)RowWeightage.QcRow;
				    lock (_lock)
				    {
				    WeightageRowNumberall.Add(QcRowWeightageRowNumber);
				    }

                                }
                            }
                        }

                    }




推荐答案

实际上这样我首先做的就是工作

actually this way i did it first which is working

                          Parallel.ForEach(DistinctBroker, broker =>,,
                          {
                              // for broker row .... weightage 1 (no color)

                              //Interlocked.Increment(ref rowNumber);
                              brokerRowWeightageRowNumber = new WeightageRowNumber();
                              brokerRowWeightageRowNumber.Section = section;
                              brokerRowWeightageRowNumber.Lineitem = Li;
                              brokerRowWeightageRowNumber.Broker = broker;
                              brokerRowWeightageRowNumber.RowNumber = Interlocked.Increment(ref rowNumber);
                              brokerRowWeightageRowNumber.Weightage = 1;

                              lock (_lock)
                              {
                                  WeightageRowNumberall.Add(brokerRowWeightageRowNumber);
                              }
                          });

现在我想使用分区,所以我改变了我的代码,但现在我的代码没有编译。这里是代码

now i want to use partition so i change my code this way but now my code not compiling. here is code

                          Parallel.ForEach(DistinctBroker, broker,
                              (j, loop, subtotal) =>
                          {
                              brokerRowWeightageRowNumber = new WeightageRowNumber();
                              brokerRowWeightageRowNumber.Section = section;
                              brokerRowWeightageRowNumber.Lineitem = Li;
                              brokerRowWeightageRowNumber.Broker = broker;
                              brokerRowWeightageRowNumber.RowNumber = Interlocked.Increment(ref rowNumber);
                              brokerRowWeightageRowNumber.Weightage = 1;

                              lock (_lock)
                              {
                                  WeightageRowNumberall.Add(brokerRowWeightageRowNumber);
                              }
                              return brokerRowWeightageRowNumber.RowNumber;

                          },
                          
                          (finalResult) =>
				  ConsensusRowWeightageRowNumber = new WeightageRowNumber();
				  ConsensusRowWeightageRowNumber.Section = section;
				  ConsensusRowWeightageRowNumber.Lineitem = Li;
				  ConsensusRowWeightageRowNumber.Broker = "";
				  ConsensusRowWeightageRowNumber.RowNumber = Interlocked.Increment(ref finalResult); 
				  ConsensusRowWeightageRowNumber.Weightage = 2;

				  lock (_lock)
				  {
				      WeightageRowNumberall.Add(ConsensusRowWeightageRowNumber);
				  }                              
                          );

请参阅我的第二组代码并告诉我如何重组以使用并行foreach的分区来迭代我的列表。

please see my second set of code and show me how to restructure to use partition for parallel foreach to iterate my list.

请帮我修改我可以测试的代码版本。谢谢

please help me with rectified version of my code which i can test. thanks








这篇关于如何对我的代码使用带有分区局部变量的Parallel.ForEach循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆