public void Start(int pollIntervalInSeconds, IDataAccess dal, ILogger logger) { while (true) { var tables = dal.GetAllTables(); int rc = 0; foreach (Table t in tables.OrderByDescending(t => t.Prefetch)) { try { int rowCount = 0; var changedRows = dal.Extract (t); if(changedRows.Count > 0) { logger.WriteLine ("Extracting {0} from {1}...", changedRows.Count, t); } foreach (var changedRow in changedRows) { t.MaxExtractedVersion = (byte[])changedRow ["Version"]; changedRow ["_extracted_on"] = DateTime.Now; changedRow ["_environment"] = t.Environment; if (t.Prefetch) { // prefetched data needs to be updated in cache when it changes Cache.Set (t.Environment, t.Name, t.GetKey (changedRow), changedRow); } dal.UpsertRow (t, changedRow); dal.PersistVersion (t); rowCount++; } rc += rowCount; } catch (Exception ex) { Console.WriteLine(ex.ToString()); Debug.WriteLine(ex.ToString()); } } if (rc == 0) { Thread.Sleep(pollIntervalInSeconds*1000); } } }