Я бы запустил два таймера, которые будут запускать свои обработчики событий в отдельных потоках ThreadPool.Обработчик событий для первого таймера проверит данные на веб-службе, запишет их в Queue<T>
, если найдет их, и затем вернется в спящий режим до следующего интервала.
Обработчик событий для второго таймера считывает очередь и обновляет базу данных, а затем спит до следующего интервала.Оба обработчика событий должны обернуть доступ к очереди lock
для управления параллелизмом.
Отдельные таймеры с независимыми интервалами позволят вам разъединять, когда доступны данные, от времени, которое требуется для их вставки в базу данных, сочередь выступает в качестве буфера.Так как общие очереди могут динамически расти, у вас будет немного места, даже если база данных будет недоступна какое-то время.Второй обработчик событий может даже порождать несколько потоков, чтобы вставлять несколько записей одновременно или в зеркальные базы данных.Обработчики событий также могут публиковать обновления в файле журнала или пользовательском интерфейсе, чтобы помочь вам отслеживать активность.