Beispiel #1
0
        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);
        }