private async Task <IEnumerable <string> > GetRsses(IEnumerable <string> addresses) { var result = new List <string>(); object sync = new object(); using var cancellationTokenSource = new CancellationTokenSource(timeout); try { await Task.WhenAll( Partitioner.Create(addresses).GetPartitions(5).Select(partition => Task.Run(async() => { using (partition) { while (partition.MoveNext()) { var html = await webService.TryGetHtml(partition.Current); if (html != null) { var hrefs = RegexUtilities.GetHrefs(html); var rsses = hrefs.Where(n => n != null && (n.Contains("rss") || n.Contains("atom") || n.Contains("feed"))).Distinct(); lock (sync) { result.AddRange(rsses); } } } }; }, cancellationTokenSource.Token))); } catch (Exception) { } return(result); }