C#臨時變量---閉包

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

代碼段1for (int i = 0; i < 50; i++)
 {
     Task.Run(() =>
     {
         Console.WriteLine(i);//結果不是
     });
 }

代碼段2for (int i = 0; i < 50; i++)
 {
     int k = i;
     Task.Run(() =>
     {
         Console.WriteLine(k);輸出 1-49
     });
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章