Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Попробуйте увеличить минимальное число работающих потоков на
ThreadPool.SetMinThreads(84,84);
Это должно значительно ускорить процесс.
Что касается создания задачи, на которое указывает Илья, я бы порекомендовал вам полностью исключить часть Task.Run / AwaitAll и использовать механизм Parallel, который был разработан именно для такой задачи:
Parallel.ForEach(UrlsToProcess, data =>
{
var htmToParse = ScrapUtils.GetAgilityDocby(cookie, data.URL);
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmToParse);
data.doc = htmlDoc;
});