.net PLINQ更新失败
对不起我的英语。这是我的问题 我正在尝试通过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
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中的行,我可以确认这一点。看起来这不应该发生。试图了解更多。