private static async Task ProcessExisting(ApplicationDbContext dbContext, IScholarService scholarService) { // grab N people with scholar who haven't been updated recently var oldestUpdatedScholarPeopleIds = await dbContext.PeopleSources .Where(s => s.Source == "scholar") .OrderBy(s => s.LastUpdate) .Select(s => s.PersonId).Take(20).ToArrayAsync(); _log.Information("Updating scholar information for {num} people ", oldestUpdatedScholarPeopleIds.Length); foreach (var personId in oldestUpdatedScholarPeopleIds) { try { _log.Information("Processing {id}", personId); await scholarService.SyncForPerson(personId); } catch (ApplicationException) { _log.Warning("Could not process user {id}", personId); } finally { // wait a little before trying the next one to make sure our data source is happy await Task.Delay(_random.Next(1500, 3500)); } } }
private static async Task ProcessFirstTimers(ApplicationDbContext dbContext, IScholarService scholarService) { // grab N random people who need sources setup first time var firstTimePeopleWithoutScholarSource = await dbContext.People.Where(p => !p.Sources.Any(s => s.Source == "scholar")).Take(20).ToArrayAsync(); _log.Information("Processing {num} people without scholar sources", firstTimePeopleWithoutScholarSource.Length); foreach (var person in firstTimePeopleWithoutScholarSource) { try { _log.Information("Processing {name} ({id})", person.FullName, person.Id); await scholarService.SyncForPerson(person.Id); } catch (ApplicationException) { _log.Warning("Could not process user {id}", person.Id); } finally { // wait a little before trying the next one to make sure our data source is happy await Task.Delay(_random.Next(1500, 3500)); } } }