Я пытаюсь запустить задачу в фоновом режиме, проверяя в базе данных количество записей в таблице, и, если число изменилось с момента последней проверки, получить эти записи и поработать с ними.
Используя следующий код, я получаю переполнение стека примерно через два часа. В течение этого времени приложение ничего не делает, просто проверяет, и никакие задания не добавляются в базу данных.
private Thread threadTask = null;
private int recordCount = 0;
private void threadTask_Start()
{
if (threadTask == null) {
threadTask = new Thread(taskCheck);
threadTask.Start();
}
}
private void taskCheck()
{
int recordCountNew = GetDBRecordCound();
if (recordCountNew != recordCount)
{
taskDo();
recordCount = recordCountNew; // Reset the local count for the next loop
}
else
Thread.Sleep(1000); // Give the thread a quick break
taskCheck();
}
private void taskDo()
{
// get the top DB record and handle it
// delete this record from the db
}
Когда он переполняется, в стеке вызовов находится тонна taskCheck()
.
Я предполагаю, что taskCheck () никогда не завершается, пока не завершится taskCheck (), не переполнится, и, следовательно, почему они все остаются в стеке.
Это явно не правильный путь, так что же?