0

我在这里拿到了我的记录。

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 中运行它时,我收到了这个错误:

截屏

4

1 回答 1

0

这是我的正常循环,工作正常。

我不会说很好,它非常低效。由于dtEmployee表示一个query,并且AsEnumerable()意味着它不再是一个数据库查询,而只是一个惰性序列,因此每个ElementAt()(以及Count())都会导致一个单独的数据库查询,这可能会检索所有员工。

要解决此问题,请使用foreach

foreach (var drEmployee in dtEmployee)
{
}

这是我想尝试的并行循环。

由于dtEmployee不是线程安全的,因此您不能同时从多个线程访问它。这里的修复实际上与上面几乎相同:使用Parallel.ForEach()

Parallel.ForEach(dtEmployee, drEmployee => {
});
于 2016-06-10T01:54:56.057 回答