這是一些樣品的測試軟件,我想學習Parallel.Foreach循環功能Parallel.ForEach循環行爲
static void Main(string[] args)
{
List<string> Months = new List<string>()
{
"Jan", "Feb", "Mar", "Apr", "May", "June"
};
Parallel.ForEach(Months, (x) => ProcessRandom(x));
Console.ReadLine();
}
public static void ProcessRandom(string s)
{
Random r = new Random();
int i = r.Next(1, 100);
Thread.Sleep(1000);
Console.WriteLine(string.Format("Month Name {0} and Random ID assigned {1}", s, i));
}
我對並行的foreach的理解是,它會運行與從列表中選擇參數ProcessRandom方法在平行下。該方法內的所有變量都是獨立的,它們將獨立運行。但是當我運行時,我發現存儲在整數'i'中的隨機值對於來自月份列表中的幾個輸入端顯示相同,或者可能是2將具有不同的隨機值。爲什麼這是這樣的行爲。並行循環不應該爲每次迭代創建新的隨機值。如果我使用parallelOptions並將MaxDegree的Parallelism設置爲1,那麼我在變量'i'中看到不同的值。
請指導我理解並行循環。
我不認爲這是parallel.foreach的問題,而是與隨機。如果對循環使用相同的隨機實例,則可能會看到更多可預測的結果。 – 2012-03-11 03:03:55
如果使用靜態函數,則可以使它們在自己的容器中運行。 – 2012-03-11 03:09:10
@ Gary.S,有一個實例無法正常工作,因爲「隨機」不是線程安全的。 – svick 2012-03-11 03:22:20