Я разработал приложение, которое извлекает X записей из моей базы данных на X потоков. Затем каждый поток повторяет созданные коллекции и выполняет некоторую проверку данных для каждой записи.
Как только запись подтверждена / не подтверждена приложением, она обновляется в базе данных как действительная / недействительная. Записи извлекаются каждым потоком, только если в базе данных есть элементы, которые не были запущены через приложение. Есть битовый столбец, чтобы указать, извлекло ли приложение данные.
Таким образом, потенциально система может исчерпать данные в зависимости от количества потоков и записей на поток. Я хочу, чтобы приложение продолжало проверять базу данных на наличие записей, которые еще не были запущены, а затем начало процесса создания потоков и, наконец, проверки данных.
Вот пример:
В базе 50 записей
мы запускаем 5 потоков с 10 записями на поток.
Приложение запускается, потоки создаются, записи извлекаются и затем обрабатываются. Теперь в системе нет данных. Пользователь импортирует больше данных в БД. Приложение, все еще ищущее, есть ли какие-либо записи, видит, что в базе данных есть 5 новых записей. Затем он начинает процесс заново, чтобы создать потоки и обработать записи.
Как я могу заставить систему продолжать искать данные, но позволить пользователю остановить систему в случае необходимости. Я пытался использовать это:
while(RecordsFound <=0){
…sleepcode
} ;
RunProcessMethod
Но winform блокируется, очевидно, в течение периода ожидания. Я пытался добавить логику ожидания в другой поток, но боялся, что если я запусту метод процесса из этого потока через делегата, все будет странно, так как я создаю дополнительные потоки внутри этого метода.
Мысли?