代碼段1的輸出結果不規則,大都>45
代碼段2的輸出和預期的一樣,1-49全部輸出
原因是兩斷代碼i對於循環體都是全局變量,而外層的for循環運行很快,內層需要創建任務,當內層開始執行第一個任務的時候,外層for循環已經快結束或已經結束,所以代碼段1的輸出結果不規則
代碼段2每次進行循環都會創建在新的作用域中創建一個新的臨時變量,執行每個task的時候都會找對應作用域中的臨時變量
代碼段1:
for (int i = 0; i < 50; i++)
{
Task.Run(() =>
{
Console.WriteLine(i);//結果不是
});
}
代碼段2:
for (int i = 0; i < 50; i++)
{
int k = i;
Task.Run(() =>
{
Console.WriteLine(k);輸出 1-49
});
}