我正在翻阅一组数据(下面的查询示例)来验证一些信息。当我使用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);
});
}
}
任何帮助,以弄清楚为什么第二页的结果将空回来是值得赞赏的。感谢。
答案 0 :(得分:2)
您发表的评论似乎是在请求之间共享SqlConnection
。该类不是线程安全的。 SqlConnection
is optimised to have many short lived connections,根据需要创建连接,然后在使用using
块完成后将其丢弃。