Esempio n. 1
0
        private async Task RunCrawl(string hostname)
        {
            HostUrl = VerifyUrlIntegrity(hostname);

            LinksToCrawl.Enqueue(HostUrl.OriginalString);

            while (LinksToCrawl.Any())
            {
                List <Task> tasks = new List <Task>();

                for (var thread = 1; thread <= ConcurrencyLimit && thread <= LinksToCrawl.Count; thread++)
                {
                    var link = new Uri(LinksToCrawl.Dequeue());
                    if (WebsiteMap.ContainsKey(link.Host + link.AbsolutePath))
                    {
                        continue;
                    }
                    tasks.Add(CrawlPage(link.OriginalString));
                }

                await Task.WhenAll(tasks);
            }

            Console.WriteLine($"Found {WebsiteMap.Count} links");
        }