Для заполнения списка данных я использовал вложенный параллельный цикл. после использования 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, то никогда не сталкиваюсь с ошибкой. Последовательность не содержит элементов.
скажите мне причину, если кто-то понимает, почему я получаю ошибку времени, а иногда нет? я не могу уловить причину ошибки, которая происходит не всегда, а какое-то время.
спасибо