我正在使用多线程从Web服务检索值。 以下代码如下:
public static Dictionary<string, DTTmpStf> GetTempStaff(DataTable dt, string columnName, DAWSConfig dawsConfig)
{
Dictionary<string, DTTmpStf> result = new Dictionary<string, DTTmpStf>();
Parallel.For(0, dt.Rows.Count, new ParallelOptions { MaxDegreeOfParallelism = Common.MAX_THREAD },
i =>
{
string tempStaffNo = dt.Rows[i][columnName]?.ToString();
if (!String.IsNullOrEmpty(tempStaffNo))
{
DTTmpStf res = GetTempStaff(tempStaffNo, dawsConfig);
if (res != null)
result[tempStaffNo] = res;
}
});
return result;
}
但是有时我在以下行中得到错误:
result[tempStaffNo] = res;
我不确定为什么会出现此错误。因为如果您看到的,在函数的开头,我已经用new
关键字实例化了,因此result
不应为null。 tempStaffNo
和res
也不应为null,因为已经对其进行了检查。
我得到的堆栈跟踪是:
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at Apps.Staff.<>c__DisplayClass3_0.<GetTempStaff>b__0(Int32 i) in D:\Codes\Code.cs:line 124
at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
有什么想法吗?