C# 将Parallel.ForEach与DataTable一起使用会引发对象引用异常

C# 将Parallel.ForEach与DataTable一起使用会引发对象引用异常,c#,datatable,parallel.foreach,C#,Datatable,Parallel.foreach,我在我的项目中得到了这个代码。它会进行一些cpu处理,所以为了加快速度,我尝试使用Parallel.ForEach 出于某种原因,并行执行会添加一个空项,这会导致程序后期出现“对象引用未设置为对象实例”异常 **它不应该添加null 工作代码 foreach (DataRow datarow in dataSet.Tables[0].Rows) { var item = new T(); for (int i = 0; i < datarow.Table.Column

我在我的项目中得到了这个代码。它会进行一些cpu处理,所以为了加快速度,我尝试使用Parallel.ForEach

出于某种原因,并行执行会添加一个空项,这会导致程序后期出现“对象引用未设置为对象实例”异常

**它不应该添加null

工作代码

foreach (DataRow datarow in dataSet.Tables[0].Rows)
{    
   var item = new T();

   for (int i = 0; i < datarow.Table.Columns.Count; i++)
   {
      var columnName = datarow.Table.Columns[i].ColumnName;
      var columnValue = datarow[i];
      // set new object values
      // use reflection logic to grab values
   }

   finalList.add(item);
}
List<DataRow> list = dataSet.Tables[0].AsEnumerable().ToList();

Parallel.ForEach<DataRow>(list, datarow =>
{    
   var item = new T();

   for (int i = 0; i < datarow.Table.Columns.Count; i++)
   {
      var columnName = datarow.Table.Columns[i].ColumnName;
      var columnValue = datarow[i];
      // set new object values
      // use reflection logic to grab values
   }

   finalList.add(item);
}
foreach(dataSet.Tables[0].Rows中的DataRow数据行)
{    
var item=newt();
for(int i=0;i
错误代码

foreach (DataRow datarow in dataSet.Tables[0].Rows)
{    
   var item = new T();

   for (int i = 0; i < datarow.Table.Columns.Count; i++)
   {
      var columnName = datarow.Table.Columns[i].ColumnName;
      var columnValue = datarow[i];
      // set new object values
      // use reflection logic to grab values
   }

   finalList.add(item);
}
List<DataRow> list = dataSet.Tables[0].AsEnumerable().ToList();

Parallel.ForEach<DataRow>(list, datarow =>
{    
   var item = new T();

   for (int i = 0; i < datarow.Table.Columns.Count; i++)
   {
      var columnName = datarow.Table.Columns[i].ColumnName;
      var columnValue = datarow[i];
      // set new object values
      // use reflection logic to grab values
   }

   finalList.add(item);
}
List List=dataSet.Tables[0].AsEnumerable().ToList();
Parallel.ForEach(列表,datarow=>
{    
var item=newt();
for(int i=0;i
finalList的类型是什么?如果它不是一个可以由多个线程同时修改的类型,那么您可能会看到意外的行为…var list=new list();这感觉就像是东西混在一起了除非
finalList
是线程安全的,否则您需要用同步锁将其打包。因此添加()线程不安全吗?我将使用ConcurrentBag