protected override void threadmain() { using (updateDB db = new updateDB(Program.connstr, Program.dbName)) { // Read anything we queued in a previous run foreach (var alreadyClaimed in db.getClaimedUpdate()) { claimedUpdates.Enqueue(alreadyClaimed); } // Make sure we have at least highWaterMark updates queued (if they are available) while (claimedUpdates.Count < highWaterMark) { wsusUpdate nextUpdate = db.startNextUpdate(); if (nextUpdate == null) { _allUpdatesExhausted = true; exitTime = true; break; } claimedUpdates.Enqueue(nextUpdate); } while (true) { // if we drop below the low water mark, queue updates until we get to the high water mark. if (claimedUpdates.Count < lowWaterMark) { while (claimedUpdates.Count < highWaterMark) { wsusUpdate nextUpdate = db.startNextUpdate(); if (nextUpdate == null) { _allUpdatesExhausted = true; exitTime = true; break; } claimedUpdates.Enqueue(nextUpdate); } } if (exitTime) { // TODO: should we unmark what we have in progress before exiting? break; } pollTimer.WaitOne(100); } } }