Почему один и тот же аргумент передается методу при вызове через поток?
Ну, я немного новичок в концепции нитей. Я нахожусь на начальной стадии экспериментов с ним. Я написал следующий код, чтобы посмотреть, как будут выполняться потоки, помещенные в список.
using System; using System.Threading; using System.Collections.Generic; namespace ConsoleApp { class Program { static object obj = new object(); static void Main(string[] args) { List<Thread> threadList = new List<Thread>(); for (int i = 0; i < 10; i++) { threadList.Add(new Thread(() => ExecuteThread($"{ i }"))); } foreach (var thread in threadList) { thread.Start(); } return; } public static void ExecuteThread(string name) { Console.WriteLine($"In thread {name}"); lock (obj) { Console.WriteLine($"Inside the lock of thread {name}."); Console.WriteLine("Waiting for keypress...."); Console.ReadKey(); } return; } } }
И я получил следующий результат :
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
В теме 10
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
Внутри замка резьба 10.
Жду нажатия клавиши....
-------
Почему он показывает "внутри замка нити 10", а не "внутри замка нити i" ? Какую особенность потоков я не понимаю с этим выводом ?
(Под "i" я подразумеваю значение i, указанное в цикле.)
Что я уже пробовал:
Я попытался найти мгновенные значения каждой переменной с помощью отладчика, но это не очень помогло здесь.