源阵列不够长。检查 srcIndex 和长度,以及数组的下限

wan*_*alm 1 c# multithreading exception

我有一个 C# 列表,它将在 Parallel Foreach 中增加价值。现在它总是返回异常 System.IndexOutOfRangeException。当我指向 listTotalCost 时,它有以下消息

源阵列不够长。检查 srcIndex 和长度,以及数组的下限。

它是由线程安全问题和任何其他问题引起的吗?这是我的代码

List<decimal> listTotalCost = new List<decimal>();

Parallel.ForEach(listDates, dates =>
{
    using (DataSet result = calculationMgr.EvaluateFormula(companyID, dates.startDate, dates.endDate, subIndicatorID.Value.ToString(), null, false, null
        , (int)Common.Systems.Sustainability.Constants.ApprovalStatuses.Approved
        ))
    {
        DataRow dr = result.Tables[0].Rows[0];
        //totalPrice = Convert.ToDecimal(dr["Result"]).ToString("#,##0.00");
        decimal? temp = Common.Util.TryToConvertToDecimal(dr, "Result");
        if (temp != null)
        {
            //the following line is the error happened 
            listTotalCost.Add(temp.Value);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Jer*_*gen 7

您正在通过不同的线程访问列表:

您可以使用以下命令锁定列表:

lock(listTotalCost)
    listTotalCost.Add(temp.Value);
Run Code Online (Sandbox Code Playgroud)

或者使用并发集合