Я разрабатываю скребок, который очищает одну веб-страницу для ссылок, затем создает потоки, которые выполняют очистку подстраниц.
Вот что делает поток:
Dim client As New WebClient()
Dim stream As Stream = client.OpenRead(_Address)
Dim streamReader As New StreamReader(stream, True)
_Content = streamReader.ReadToEnd()
streamReader.Close()
streamReader.Dispose()
stream.Close()
stream.Dispose()
client.Dispose()
I 'мы заметили, что иногда (обычно при одновременном выполнении большего количества потоков) поток генерирует исключение.Это происходит случайным образом, исключение выдается на client.OpenRead
, и оно говорит "Value cannot be null. Parameter name: address"
.У меня также есть здесь попытка ... поймать, поэтому я поставил точку останова в блоке перехвата, и кажется, что _Address
является действительным в то время, но код выдает исключение.
_Address
- это поле защищенного класса, к которому другие потоки не могут получить доступ.
Точное сообщение:
"Значение не может быть нулевым. Имя параметра: адрес".
Исключение составляет System.ArgumentNullException
.
Трассировка стека:
в System.Net.WebClient.OpenRead (строковый адрес) в MyAppName.Scraper.Scrape () в MyAppFolder \ Scraper.vb: строка 96
Есть ли у вас какие-либо предложения по устранению проблемы?Заранее спасибо.