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);
但有例外:“指数超出范围。必须是非负数且小于集合的大小。 参数名称:索引“
请帮帮我
答案 0 :(得分:3)
好吧,我现在可以告诉你modifying the rows of a DataTable
in parallel is not Kosher(来自DataTable
类的MSDN文档):
此类型对多线程安全 读操作。你必须同步 任何写操作。
因此,虽然我不确定究竟是什么导致您提及的特定异常,但我知道您确实不应该尝试此操作,因为它不受支持。
答案 1 :(得分:0)
找到解决方案:
table.AsEnumerable()。AsParallel()。ForAll(row =&gt; {lock(table)row [“val”] = 3;});
但在那之后 - 并行毫无意义