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

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

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

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

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

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

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы