winform 并行任务集合长度变化问题

2020-12-23 10:44发布

代码:
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在任务前就赋值,防止因为长度发生变化而导致进入死循环,但是,还是出现了想象中的问题,这个该怎么解决呢?

2条回答
地球回转人心会变
2楼-- · 2020-12-23 11:28

使用并行的集合最好用 线程安全的集合,因为有可能涉及到对集合做Add,Remove。就会出现 长度发生变化的异常

查看更多
女痞
3楼-- · 2020-12-23 11:41

可以用for循环那种简单的写法,而不是foreach这种的;
还有注意for循环如果dt队列发生变化的话,要考虑遍历序列方向。

查看更多
登录 后发表回答