是否可以並行化一個循環的長度增加的循環?添加到列表中的並行循環
List<int> list = new List<int>() { 0, 1 };
for (int i = 0; i < list.Count; i++)
//Parallel.For(0, list.Count, (i) =>
{
Console.WriteLine(list[i]);
if (i == 0) list.Add(2);
}//);
//foreach (int i in list)
//Parallel.ForEach(list, (i) =>
//{
// Console.WriteLine(i);
// if (i == 0) list.Add(2);
//}//);
Console.ReadLine();
在這個簡單的例子中,期望的輸出是:
0
1
2
上面的代碼正確工作與「爲」串行,但失敗了串行「的foreach」由於集合被修改。對於兩個並行實現,代碼完成,但輸出缺少最終的'2'。
您可以將代碼拆分爲線程安全的工作項目列表和一些可以多線程處理工作項的代碼。使用'下一個'工作項目和一些鎖定的指針,你應該沒問題。 – CodingBarfield