Простите мою терминологию, я не все, что знакомы с System.Threading
, но если у меня есть что-то вроде ниже:Неправильная практика рекурсивного вызова метода потока (System.Threading)?
private static int _index;
private static List<int> _movieIds = new List<int>();
static void Main(string[] args)
{
// the below call populates the _movieIds list variable with around 130,000 ints
GetListOfMovieIdsFromDatabase();
_index = 0;
Thread myThread = new Thread(DoWork);
myThread.Start();
}
public static void DoWork()
{
// do something with the value of _index (iterate through the _movieIds list) then recursively call DoWork() again
Thread.Sleep(400);
_index++;
DoWork();
}
Это плохая практика? Я повторяю через приватный статический список int's
, определенный на уровне класса как член, поэтому первая итерация DoWork()
будет использовать первое значение _index
(в некотором смысле, которое я не объяснял для простоты), тогда вторая итерация (рекурсивный вызов) будет работать со вторым значением _index
и т. д.
Причина, по которой я прошу об этом, заключается в том, что я получаю исключение переполнения стека после 12 часов работы этого приложения, и я считаю, что это из-за рекурсивных вызовов.
Вы смотрели на этот вопрос? http://stackoverflow.com/questions/145312/maximum-number-of-threads-in-a-net-app – Kousha
Если у вас нет условия остановки, программа всегда будет сбой, потому что она рекурсивна. Действительно ли метод DoWork не получает никаких параметров? Если это так, я думаю, вы не должны использовать рекурсию. –