NullReferenceException при использовании PLINQ - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, проблема заключается в том,что при парсинге сайта с помощью HtmlAgilityPack. Метод SelectNode может вернуть null( парсю 1000 однотипных страниц, в которых точно есть определенный тег). Создаю несколько потоков наподобие этого. result - хранит html страницы. В методе CreateTagAndWrite _pricetag может быть равен null не понимаю по какой причине.
  
Parallel.Invoke(
 
                () =>
                {
                    Console.WriteLine("Start Women1");
                    Stopwatch stopWatch = new Stopwatch();
                    stopWatch.Start();
                    var result = GetAllPageInGroup(_rpages.ElementAt(0));
                    result.AsParallel().ForAll(item =>
                    {
                        CreateTagAndWrite(item, "Women1");
                    });
                    stopWatch.Stop();
                    TimeSpan ts = stopWatch.Elapsed;
                    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                        ts.Hours, ts.Minutes, ts.Seconds,
                        ts.Milliseconds / 10);
                    Console.WriteLine("Women1" + " " + "RunTime " + elapsedTime);
                },
 public static void CreateTagAndWrite(string htmlpage, string file_name)
{
 List<string> ListTag = new List<string>();
            HtmlAgilityPack.HtmlDocument html_document = new HtmlAgilityPack.HtmlDocument();
            try
            {
                string _tempitem = "";
                MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(htmlpage));
                html_document.Load(ms);
                ms.Close();
                if (html_document.DocumentNode != null)
                {
                    var _pricetag = html_document.DocumentNode.SelectNodes("//div[@class='to-favorites js-to-favorites']");
                    var _hreftag = html_document.DocumentNode.SelectNodes("//div[@class='products-list-item']/a");
                    var price = ReturnMyAttribute(_pricetag, "data-price", requires).ToList();
                    var image = ReturnMyAttribute(_pricetag, "data-image", requires).ToList();
                    var href = ReturnMyAttribute(_hreftag, "href", requires).ToList();
                }
            }
}
Если AgilityPack не поддерживает асинхронные операции ,надо ли сделать обертку для вызова SelectNodes или это не исправит проблему? Мне кажется ,что это явно "г*внокод" , посоветуйте, как правильно использовать многопоточность для этой ситуации
Up,Up
Up

Решение задачи: «NullReferenceException при использовании PLINQ»

textual
Листинг программы
public static Func<HtmlAgilityPack.HtmlAttribute, string, bool> requires = AlgorithmCheck;
// МногА кодА
 
        public static bool AlgorithmCheck(HtmlAgilityPack.HtmlAttribute attribute, string Name)
        {
            return attribute.Name == Name;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы