kot2566
@kot2566

Почему Thread работает так?

for (int i = 0; i < 2; i++)
            {
                Thread thread = new Thread(() =>
                {
                    Console.WriteLine("main index: " + i);
                  
                });
                thread.Start();
            }


Почему вывод:
main index: 2
main index: 2

Где Значения 0,1?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
Это не тред виноват, а замыкания.
Когда ты ссылаешься в лямбде на переменную - к ней обращение происходит по ссылке.
Вот и получилось, что на момент запуска значение i уже 2.
Решить эту проблему можно, если скопировать значение i в новую переменную вот так:
for (int i = 0; i < 2; i++)
{
    var i2 = i;
    Thread thread = new Thread(() =>
    {
        Console.WriteLine("main index: " + i2);
    });
    thread.Start();
}
Ответ написан
Комментировать
ayazer
@ayazer
Sr. Software Engineer
потому что когда отработает Console.WriteLine то i уже станет 2.

for (int i = 0; i < 2; i++)
{
    var index = i;
    var thread = new Thread(() =>
    {
        Console.WriteLine("main index: " + index);

    });
    thread.Start();
}

//main index: 1
//main index: 0
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы