C# 最大并行值访问量

C# 最大并行值访问量,c#,parallel.for,C#,Parallel.for,当我将并行程序的线程数量限制在6或以下时,它就可以正常工作了。如果超过6,则表示无法读取指定位置的对象。您一次可以初始化同一对象的次数有多少,或者如何修复它发出的错误?如果MaxDegreeOfParallelism是,那么所有的代码都可以很好地工作。如果没有代码,这个问题很难回答。您可能只是有一些竞争条件,只有在运行足够多的线程时才会变得明显。如果你想让别人帮你找到bug,你需要分享你的代码。尝试发布一个我刚刚添加的代码导致了一个问题什么是员工?它是线程安全的吗?您的Parallel.For可

当我将并行程序的线程数量限制在6或以下时,它就可以正常工作了。如果超过6,则表示无法读取指定位置的对象。您一次可以初始化同一对象的次数有多少,或者如何修复它发出的错误?如果MaxDegreeOfParallelism是,那么所有的代码都可以很好地工作。如果没有代码,这个问题很难回答。您可能只是有一些竞争条件,只有在运行足够多的线程时才会变得明显。如果你想让别人帮你找到bug,你需要分享你的代码。尝试发布一个我刚刚添加的代码导致了一个问题什么是员工?它是线程安全的吗?您的Parallel.For可能有多个threas同时访问employee.Add()。下面是我对employee
publicstaticmultivaluedictionary employee=newmultivaluedictionary()的定义
Parallel.For(4, erCnt/2 ,opt, a =>
{
    if (a % 2 == 0)
    {
        dynamic[] name = new dynamic[2], num = new dynamic[2], wage = new dynamic[2], dept = new dynamic[2];//, name1 = new dynamic[2], num1 = new dynamic[2], wage1 = new dynamic[2], dept1 = new dynamic[2];
        num[0] = (string)(empSheet.Cells[a, 1] as Excel.Range).Value2;
        name[0] = (string)(empSheet.Cells[a, 2] as Excel.Range).Value2 + "," + (string)(empSheet.Cells[a, 3] as Excel.Range).Value2;
        dept[0] = ((empSheet.Cells[a, 4] as Excel.Range).Value2);
        wage[0] = (empSheet.Cells[a, 5] as Excel.Range).Value2;
        num[1] = (string)(empSheet.Cells[a + 1, 1] as Excel.Range).Value2;
        name[1] = (string)(empSheet.Cells[a + 1, 2] as Excel.Range).Value2 + "," + (string)(empSheet.Cells[a + 1, 3] as Excel.Range).Value2;
        dept[1] = ((empSheet.Cells[a + 1, 4] as Excel.Range).Value2);
        wage[1] = (empSheet.Cells[a + 1, 5] as Excel.Range).Value2;
        employee.Add(name[0], dept[0]);
        employee.Add(name[0], wage[0]);
        employee.Add(name[0], num[0]);
        employee.Add(name[1], wage[1]);
        employee.Add(name[1], dept[1]);
        employee.Add(name[1], num[1]);
    }
});