Зависает поток в цикле и не выходит

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

Написал программу и поток зависал в цикле, впервый раз проверял код через дебаг и всё было окей, когда проверял в релизе зависло в цикле while(count != 0) подавил в цикл Thread.Sleep(200); и всё заработало и в релизе. Вот примерная структура кода;

void start(int threadCount)
{
  int count = 0;
  foreach(var item in items)
  {
    while(count == threadCount) 
      Thread.Sleep(200);
    count++;
    new Thread(() =>
    {
       convert(param);
       count--;
    }).Start();
  }
  while(count != 0) //Зависает всё время здесь
  Thread.Sleep(200);
}

Зависало как говорил ранее когда в релизе попробовал запустить, нашёл где виснет с помощью брекпойнтов и решил слипом проблему, после на длительной проверке программы с большим количеством данных (программа жрала оперативы не более 100мб) работает пару часов, потом может сам по себе в цикле этом встать и всё, вариант что count был не равным нулю отпадает, т.к. это проверял и значения после изменений для теста выводил, ума не приложу почему он там виснет и не перестаёт висеть, более двух часов ждал, он не отвисал, хотя все вызванные им потоки были завершены. Подскажите кто знает что я неправильно делаю

Ответы

▲ 0

Так и должно зависать. Переменная count не равна нулю. Запускается бесконечный цикл while(count != 0). Всё верно.
Если нужно чтобы чтобы основной поток ждал остальные используйте join().