C #: последовательность не содержит элементов выдачи проблем после реализации цикла parallel.foreach - PullRequest
0 голосов
/ 19 января 2019

Для заполнения списка данных я использовал вложенный параллельный цикл. после использования parallel.foreach какое-то время я получаю ошибку. Последовательность не содержит элементов , которые выбрасываются из более поздней части кода.

У меня есть два раздела в этом посте. сначала я опубликую свой код цикла parallel.foreach

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

                                }
                            }
                        }

                    }

в вышеприведенном коде я использовал parallel.foreach, потому что была огромная итерация, которая занимала несколько минут, а после использования цикла parallel.foreach начиналось несколько секунд. это было хорошо для меня, но теперь некоторое время я получаю В последовательности нет элементов error .

теперь я выкладываю код, который выдает ошибку Последовательность не содержит элементов

if (dataBroker.Any(x => !String.IsNullOrEmpty(x.FormulaLiConfig)))
{
    string formulastd = dataBroker.Where(x => !String.IsNullOrEmpty(x.FormulaLiConfig)).FirstOrDefault().FormulaLiConfig;
    List<string> stdformulalist = FormulaevaluationStandardFormula(formulastd);
    foreach (string formulatemp in stdformulalist)
    {
    if (formulatemp.Contains("~"))
    {
        string section1 = formulatemp.Split('~')[0].Trim();
        string li1 = formulatemp.Split('~')[1].Trim();

        int rowNumber1 = -1;
        rowNumber1 = WeightageRowNumberall.Where(x => x.Section.Trim().Equals(section1)
        && x.Lineitem.Trim().Equals(li1)
        && x.Broker.Equals(broker)
        && x.Weightage == (int)RowWeightage.BrokerRow).FirstOrDefault().RowNumber;

        StandardFormulaConstituents objStandardFormulaConstituents = new StandardFormulaConstituents();
        objStandardFormulaConstituents.Id = coutstdformula;
        objStandardFormulaConstituents.Constituent = formulatemp;
        objStandardFormulaConstituents.RowNumberConstituent = rowNumber1;
        coutstdformula = coutstdformula + 1;
        StandardFormulaConstituentsall.Add(objStandardFormulaConstituents);
    }
    }
}             

на самом деле точная ошибка броска строки. Последовательность не содержит элементов

rowNumber1 = WeightageRowNumberall.Where(x => x.Section.Trim().Equals(section1) && x.Lineitem.Trim().Equals(li1) 
&& x.Broker.Equals(broker) && x.Weightage == (int)RowWeightage.BrokerRow).FirstOrDefault().RowNumber;

Я не могу понять причину, почему когда-то я получаю эту ошибку. Последовательность не содержит элементов из вышеуказанной строки кода. WeightageRowNumberall заполняется параллельно. Поэтому я подозреваю, что какая-то проблема существует в цикле параллельного. Foreach.

пожалуйста, ребята, посмотрите мой код и скажите мне, почему я получаю эту ошибку? - это параллельный цикл. Foreach создает проблему согласно моему коду.

также скажите мне я должен удалить вложенный цикл параллельного. Foreach и сохранить только внешнюю параллельную. Только для речи ... имеет ли это смысл?

пожалуйста, ребята, прочитайте мой код и дайте мне какое-нибудь решение для реструктуризации моего кода, чтобы избавиться от этой ошибки Последовательность не содержит элементов .

если я удаляю parallel.foreach и использую нормальный foreach, то никогда не сталкиваюсь с ошибкой. Последовательность не содержит элементов.

скажите мне причину, если кто-то понимает, почему я получаю ошибку времени, а иногда нет? я не могу уловить причину ошибки, которая происходит не всегда, а какое-то время.

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...