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)
您正在通过不同的线程访问列表:
您可以使用以下命令锁定列表:
lock(listTotalCost)
listTotalCost.Add(temp.Value);
Run Code Online (Sandbox Code Playgroud)
或者使用并发集合。
归档时间: |
|
查看次数: |
6333 次 |
最近记录: |