0条评论
还没有人评论过~
代码:
DataTable dt_list = new DataTable();
dt_list = dt;//dt的原始数据假设为10条
Parallel.ForEach<DataRow>(dt_list.AsEnumerable(), (row) =>
{
Helper_Http.init_sourcelist(dt, row);//这里传入dt,在对应的方法中会增加dt的长度
Thread.Sleep(100);
});
//当函数执行后,很快就会报错,错误内容为:dt_list的长度发生变化
问题:
dt_list在任务前就赋值,防止因为长度发生变化而导致进入死循环,但是,还是出现了想象中的问题,这个该怎么解决呢?
使用并行的集合最好用 线程安全的集合,因为有可能涉及到对集合做Add,Remove。就会出现 长度发生变化的异常
可以用for循环那种简单的写法,而不是foreach这种的;
还有注意for循环如果dt队列发生变化的话,要考虑遍历序列方向。