PLINQ 更新失败
对不起我的英语。所以,这是我的问题 我正在尝试通过 PLINQ 更新 DataTable 这是我的代码
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);
,但有例外:“索引超出范围。必须为非负数且小于集合的大小。 参数名称:index”
请帮助我
sorry for my English. So, here is my question
I'm trying to update DataTable by PLINQ
Here is my code
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);
But there is exception:"Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index"
Please, help me
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好吧,我现在可以告诉您,修改 a 的行并行的
DataTable
不符合 Kosher(来自关于DataTable
类的 MSDN 文档):因此,虽然我不确定到底是什么导致了您提到的特定异常,但我知道您确实不应该尝试此操作,因为它不受支持。
Well, I can tell you right now that modifying the rows of a
DataTable
in parallel is not Kosher (from the MSDN documentation on theDataTable
class):So while I'm not sure exactly what's causing the particular exception you mention, I know that you really shouldn't be attempting this as it is unsupported.
找到解决方案:
table.AsEnumerable().AsParallel().ForAll(row => { lock(table)row["val"] = 3; });
但在那之后 - 平行就没有意义了
Found solution:
table.AsEnumerable().AsParallel().ForAll(row => { lock(table)row["val"] = 3; });
But after that - parallel makes no sense