basically i'm trying run four functions together using task. these four functions runs their own foreach loop. when i'm executing these functions keep getting error. "Collection was modified; enumeration operation may not execute. "
so far methods I have tried:
method 1: fail
var tasks = new[]
{
Task.Factory.StartNew(() => function1(publishrequest,nextshiftRq, publishList)),
Task.Factory.StartNew(() => function2(publishrequest,nextshiftRq, publishList)),
Task.Factory.StartNew(() => function3(publishrequest,nextshiftRq, publishList)),
Task.Factory.StartNew(() => function4(publishrequest,nextshiftRq, publishList))
};
Task.WaitAll(tasks);
method 2: fail
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(() => function1(publishrequest, nextshiftRq, publishList)));
tasks.Add(Task.Factory.StartNew(() => function2(publishrequest, nextshiftRq, publishList)));
tasks.Add(Task.Factory.StartNew(() => function3(publishrequest, nextshiftRq, publishList)));
tasks.Add(Task.Factory.StartNew(() => function4(publishrequest, nextshiftRq, publishList)));
Task.WaitAll(tasks.ToArray());
method 3: fail
Parallel.Invoke(
() = {function1(publishrequest, nextshiftRq, publishList)},
() = {function2(publishrequest, nextshiftRq, publishList)},
() = {function3(publishrequest, nextshiftRq, publishList)},
() = {function4(publishrequest, nextshiftRq, publishList)});
inside in functions
public void function1(publish p1,nextshift nx, List<publish> pub)
{
foreach(publish in pub.ToList())
{
Evaluate.EvaluateShift(p1.publishShift.ShiftRpt,publish.SectionId);
Evaluate.EvaluateShift(nx,publish.SectionId);
}
}
//this function1 again call another function where another foreach loop is running.
//Evaluate.Evaluateshift
Evaluateshift(shiftRpt rpt, int sectionId)
{
ShiftPI currentShiftI = DataService.GetEntity(GetDataRequest<ShiftPI>.Create(c =>
c.ShiftID == rpt.ShiftID && c.SectionPanelID == sectionId, "ShiftPI"));
if(currentShiftI != null)
{
List<SectionPanelPI> sectionPanelPIs = DataService.GetAll(GetDataRequest<SectionPanelHSEKPI>.Create(c =>
c.SectionPanelID == sectionId, "PI", "PIStatistics")).ToList();
foreach(sectionPanelPI in sectionPanelPIs)
{
do more stuff....
}
}
}
public void function2(publish p1,nextshift nx, List<publish> pub)
{
foreach(publish in pub.ToList())
{
//do stuff
}
}
public void function3(publish p1,nextshift nx, List<publish> pub)
{
foreach(publish in pub.ToList())
{
//do stuff
}
}
public void function4(publish p1,nextshift nx, List<publish> pub)
{
foreach(publish in pub.ToList())
{
//do stuff
}
}