VB.NET使用Parallel.ForEach遍历DataSet中DataTable出现重载解析失败错误求助
问题定位与解决方案
错误根源
Parallel.ForEach要求传入的可枚举对象必须实现泛型IEnumerable(Of T)接口,而你代码中的ds.Tables.Cast(Of DataTable)存在语法错误:Cast(Of T)是LINQ提供的泛型扩展方法,VB.NET中调用泛型方法时必须追加方法调用括号(),你漏写了括号导致编译器无法识别该方法的返回值为IEnumerable(Of DataTable)类型,自然匹配不到Parallel.ForEach的对应重载,触发重载解析失败报错。
修正方案
将Parallel.ForEach调用段修改为如下代码即可:
Parallel.ForEach( ds.Tables.Cast(Of DataTable)(), Sub(table) ProcessTable(table) End Sub )
额外注意事项
- 请确认代码顶部已经导入了对应命名空间,否则依然会触发编译错误:
Imports System.Linq Imports System.Threading.Tasks - 你自定义的
ProcessTable方法必须保证线程安全,不要在方法内对共享资源做无锁的写入操作,DataTable、DataSet本身的实例成员不保证线程安全,并行操作时涉及写入操作必须手动加锁。
内容的提问来源于stack exchange,提问作者Acavier
相关产品推荐
相关产品推荐

