private async Task FindLinksAsync(Uri parentUri, HtmlDocument document, IConstraint constraint, int depth) { IEnumerable <string> links = document.GetLinksFromTagsA(); int lowerDepth = --depth; var tasks = new List <Task>(); foreach (string link in links) { if (!FilterLink(link)) { continue; } Uri uri = CreateUri(parentUri, link); if (!_visitedUris.Contains(uri) && constraint.IsHtmlLinkPermissible(uri, parentUri)) { _visitedUris.Add(uri); tasks.Add(DownloadWebpageAsync(uri, constraint, lowerDepth)); } } await Task.WhenAll(tasks); }