我正在學習在C#中使用任務並行庫(TPL),並編寫了下面的代碼(可以複製它並運行它)。爲什麼工廠循環打印超出循環索引?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace parallelTaskLibrary
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 6; i++)
{
var t01 = Task.Factory.StartNew(() => Console.WriteLine("in loop: i = {0}", i));
}
Console.WriteLine("press any key to terminate...");
Console.ReadKey();
}
}
}
在for
迴路,計數器索引i
不能與i = 6
一個值開始迭代。但是,我得到的輸出是這樣的:
press any key to terminate...
in loop: i = 6
in loop: i = 6
in loop: i = 6
in loop: i = 6
in loop: i = 6
in loop: i = 6
然而,在另一上市(代碼並沒有改變),我得到這個:
in loop: i = 1
in loop: i = 1
in loop: i = 2
in loop: i = 3
in loop: i = 4
in loop: i = 5
press any key to terminate...
這是合理的......
我調試的代碼,並發現i
值是:0,1,3,4,5,6
如何發生的呢?
爲什麼我在循環中得到(i = 6)?
我的代碼有什麼問題嗎?
注:我使用Visual Studio 2010
@HansKesting,我知道:
創建執行所有6個線程關於這個問題。而foreach將在裏面聲明變量。請閱讀[打破VS2012的更改](https://msdn.microsoft.com/en-us/library/hh678682(v = vs.110).aspx)。 – Qwertiy
你說得對,我忘記了。您可能需要在您的答案中添加展開內容。 –
你是對的,但確實有效,但是,我在操作系統層面尋找原因。 – ThunderWiring