private async Task DownloadFilesAsync(Uri parentUri, HtmlDocument document, IConstraint constraint)
        {
            IEnumerable <string> links = document.GetAllLinksExceptTagALinks();
            var tasks = new List <Task>();

            foreach (string link in links)
            {
                if (!FilterLink(link))
                {
                    continue;
                }

                Uri uri = CreateUri(parentUri, link);
                if (!_visitedUris.Contains(uri) && constraint.IsSourceLinkPermissible(uri))
                {
                    _visitedUris.Add(uri);
                    tasks.Add(GetSourceFileAndDownloadAsync(uri));
                }
            }

            await Task.WhenAll(tasks);
        }