多個我使用以下代碼來創建多個線程,這將在給定的範圍內的陣列上工作(最小,最大)環路用於創建不同的線程派生中的同一個
當我只跑這個代碼陣列的下半部分是被修改了,所以我把名字外地到Threads.advance,這樣我可以打印出線程的數量,當我做我得到以下幾點:
Thread Stopped: 2 Range: 25 50
Thread Stopped: 2 Range: 25 50
這是令人困惑原因有兩個:
1)numThreads
變量爲2,因此for循環應該從0到1,但名稱打印爲2.
2)所有正在生成的線程具有相同的範圍和名稱,即使值我在for循環中傳遞更改。
Task[] tasks = new Task[numThreads];
int minRange, maxRange;
for (int i = 0; i < numThreads; i++)
{
minRange = worldlength/numThreads * i;
maxRange = worldlength/numThreads * (i + 1);
tasks[i] = (Task.Factory.StartNew(() => Threads.advance(minRange, maxRange, i.ToString())));
}
Console.WriteLine();
Task.WaitAll(tasks);
重複的「閉包和循環」問題...搜索...像http://stackoverflow.com/questions/4341031/different-behaviors-with-a-for-loop-and-a-foreach-loop -with-closures - 鏈接到[關閉循環變量被認爲是有害的](http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered -harmful.aspx) –
[C#中的lambda如何綁定到foreach中的枚舉器?](http://stackoverflow.com/questions/2413706/how-does-a-lambda-in-c-清除綁定到枚舉器在一個foreach) –