private async Task FetchNewMeetings() { foreach (Source source in await db.Sources.ToListAsync().ConfigureAwait(false)) { ISet <string> seenMeetings = new HashSet <string>(await db.Meetings.Where(m => m.Source == source).Select(m => m.Url.ToString()).ToListAsync().ConfigureAwait(false)); IScraper scraper = CreateScraper(source.Url); IEnumerable <Meeting> meetings = await scraper.FindMeetings(null, seenMeetings).ConfigureAwait(false); foreach (Meeting meeting in meetings) { meeting.Source = source; await db.Meetings.AddAsync(meeting).ConfigureAwait(false); IEnumerable <Document> documents = await scraper.GetDocuments(meeting).ConfigureAwait(false); foreach (Document document in documents) { document.Meeting = meeting; await GetText(document).ConfigureAwait(false); await db.Documents.AddAsync(document).ConfigureAwait(false); await db.SaveChangesAsync().ConfigureAwait(false); } } } }