NullReferenceException при использовании PLINQ - C#
Формулировка задачи:
Добрый день, проблема заключается в том,что при парсинге сайта с помощью HtmlAgilityPack. Метод SelectNode может вернуть null( парсю 1000 однотипных страниц, в которых точно есть определенный тег).
Создаю несколько потоков наподобие этого. result - хранит html страницы. В методе CreateTagAndWrite _pricetag может быть равен null не понимаю по какой причине.
Если AgilityPack не поддерживает асинхронные операции ,надо ли сделать обертку для вызова SelectNodes или это не исправит проблему? Мне кажется ,что это явно "г*внокод" , посоветуйте, как правильно использовать многопоточность для этой ситуации
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(); } } }
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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д