@John_Nash
coder

Передача параметров в Thread. В чем косяк?

const int asyncCounter = 4;
            int countGlobal = Convert.ToInt32(17);
            for (int i0 = 0; i0 < countGlobal; i0 += asyncCounter)
            {
                int count;
                if (i0 + asyncCounter > countGlobal)
                    count = countGlobal % asyncCounter;
                else
                    count = asyncCounter;
                List<Thread> threads = new List<Thread>();
                for (int i = 1; i <= count; ++i)
                {
                    Thread send = new Thread(() => senderThread(i0 + i));
                    send.Start();
                    threads.Add(send);
                }
                foreach (var send in threads)
                {
                    send.Join();
                }
            }

Поток получает левые значения (например, 18)
Что я не учел?
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
Вы не учли момент вызова функции () => senderThread(i0 + i)
Вы не можете знать когда система отдаст время на другие потоки. Это может случиться когда цикл уже закончится или в процессе его выполнения.
В вашем случае лучше использовать ParameterizedThreadStart и Start(object parameter)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mshak
@mshak
Еще, как вариант, можете предварительно скопировать i в отдельную переменную, а дальше как у вас написано.

Int t0 =i0;
Int t =i;
Thread send = new Thread(() => senderThread(t0 + t));
Ответ написан
Ваш ответ на вопрос

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

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