.net PLINQ更新失败

.net PLINQ更新失败,.net,linq,plinq,forall,.net,Linq,Plinq,Forall,对不起我的英语。这是我的问题 我正在尝试通过PLINQ更新数据表 这是我的密码 DataTable table = new DataTable(); table.Columns.Add(new DataColumn("val", typeof(decimal))); int N = 1000000; for (int i = 0; i < N; i++) table.Rows.Add(new object[] { i }); table.AsEnumerable().AsParal

对不起我的英语。这是我的问题 我正在尝试通过PLINQ更新数据表 这是我的密码

DataTable table = new DataTable();

table.Columns.Add(new DataColumn("val", typeof(decimal)));

int N = 1000000;

for (int i = 0; i < N; i++) table.Rows.Add(new object[] { i });

table.AsEnumerable().AsParallel().ForAll(row => row["val"] = 3);
DataTable=newdatatable();
表.Columns.Add(新数据列(“val”,typeof(decimal)));
int N=1000000;
对于(inti=0;i行[“val”]=3);
但也有例外:“索引超出范围。必须是非负的并且小于集合的大小。 参数名称:索引“


请帮帮我,我现在可以告诉你(从
DataTable
类上的MSDN文档):

这种类型对于多线程系统是安全的 读取操作。您必须同步 任何写操作

因此,虽然我不确定是什么原因导致了您提到的特定异常,但我知道您确实不应该尝试这样做,因为它不受支持。

找到了解决方案:

table.AsEnumerable().AsParallel().ForAll(row=>{lock(table)row[“val”]=3;})


但是在那之后-并行就没有意义了

为什么要向数据表中添加行?DataTables用于从数据库检索数据。将数据放入强类型对象比编辑数据表更好,这只是一个小例子。当然,这是一个人工示例,我从数据库中获取行。这就是最后一行。如何在plinqOK中更新datatable中的行,我可以确认这一点。看起来这不应该发生。试图了解更多。