我正在通過一組數據(以下查詢的示例)進行分頁以驗證某些信息。當我使用Parallel.ForEach時,獲取第二頁結果的SQL命令將回到空白。如果我在返回語句中斷並將活動行移回存儲庫,它將返回我正在查找的結果。將Parallel.ForEach更改爲標準C#foreach按預期工作。查詢Parallel.ForEach導致SQL查詢不起作用
例子:代碼
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);
});
}
}
任何幫助弄清楚爲什麼結果的第二頁是回來空表示讚賞。謝謝。
很可能'Repository.StudentVerified'不是線程安全的。你需要顯示它的代碼。 –
這是一個簡單的SQL UPDATE語句。但是,如果線程安全或不是線程安全,SELECT命令仍應返回數據或應該有例外。沒有結果肯定是不期望的。 – Brian
_「將Parallel.ForEach更改爲標準C#foreach可按預期工作」_作爲Scott的後續工作,在選項中將MaxDegreeOfParallelism設置爲1(僅僅是爲了它)可能會導致它工作太。因此,問題不在於「Parallel.ForEach導致SQL查詢無法正常工作」,而是您的代碼可能不是線程安全的。如果'Repository.StudentVerified'全部共享同一個數據庫連接,那麼這也許是你的問題。同樣適用於EF – MickyD