Parallel.ForEach导致SQL查询无法正常工作

时间:2016-07-27 00:01:53

标签: c# parallel-processing

我正在翻阅一组数据(下面的查询示例)来验证一些信息。当我使用Parallel.ForEach时,获取第二页结果的SQL命令返回空。如果我中断return语句并将活动行移回Repository,它将返回我正在寻找的结果。将Parallel.ForEach更改为标准C#foreach按预期工作。

查询示例:

SELECT TOP 500
        StudentID,
        StudentName
    FROM Student
    WHERE StudentVerified IS NULL

代码示例......

while(true)
{
    using(var rep = new Repository())
    {
        var students = rep.GetStudents();
        if (students.Length == 0) return false;
        Parallel.ForEach(students, (student) =>
        {
            rep.StudentVerified(student.StudentID, true);
        });
    }
}

任何帮助,以弄清楚为什么第二页的结果将空回来是值得赞赏的。感谢。

1 个答案:

答案 0 :(得分:2)

您发表的评论似乎是在请求之间共享SqlConnection。该类不是线程安全的。 SqlConnection is optimised to have many short lived connections,根据需要创建连接,然后在使用using块完成后将其丢弃。