多线程:将值分配给字典会导致“对象引用”未设置为对象的实例

时间:2018-12-04 09:10:24

标签: c# multithreading

我正在使用多线程从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。 tempStaffNores也不应为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()

有什么想法吗?

0 个答案:

没有答案