对不起,我的英语不好。
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);但有一个例外:“索引超出范围,必须是非负数且小于集合的大小。参数名:索引”
请帮帮我
发布于 2010-08-19 21:24:07
好吧,我现在可以告诉你modifying the rows of a DataTable in parallel is not Kosher (来自DataTable类的MSDN文档):
此类型对于多线程读取操作是安全的。您必须同步所有写入操作。
因此,虽然我不确定是什么导致了您提到的特定异常,但我知道您真的不应该尝试这样做,因为它是不受支持的。
发布于 2010-08-19 22:34:33
找到解决方案:
table.AsEnumerable().AsParallel().ForAll(row => {lock(表)row“val”= 3;});
但在那之后-并行就没有意义了
https://stackoverflow.com/questions/3521418
复制相似问题