我在这里得到了我的记录。
IQueryable<EmployeeItem> dtEmployee = GetAll();
在dtEmployee
的循环之后。
这是我的正常循环,工作正常。
for (int i = 0; i < dtEmployee.Count(); i++)
{
var drEmployee = dtEmployee.AsEnumerable().ElementAt(i);
}
这是我想尝试的并行循环。
System.Threading.Tasks.Parallel.For(0, dtEmployee.Count(), i => {
var drEmployee = dtEmployee.AsEnumerable().ElementAt(i);
});
我没有任何编译错误,但是当我在Visual Studio中运行它时,我收到了这个错误:
答案 0 :(得分:0)
这是我的正常循环,工作正常。
我不会说得好,效率极低。由于dtEmployee
代表查询,而AsEnumerable()
意味着它不再是数据库查询,只是一个懒惰的序列,每个ElementAt()
(以及Count()
)会导致单独的数据库查询,这可能会检索所有员工。
要解决此问题,请使用foreach
:
foreach (var drEmployee in dtEmployee)
{
}
这是我想尝试的并行循环。
由于dtEmployee
不是线程安全的,因此您无法同时从多个线程访问它。这里的修复实际上与上面几乎相同:使用Parallel.ForEach()
:
Parallel.ForEach(dtEmployee, drEmployee => {
});