WebClient DownloadString не работает в ThreadPool - PullRequest
0 голосов
/ 13 июля 2020

Сейчас у меня есть проект, в котором я пытаюсь получить информацию из NZBIndex.nl API с помощью C# console-application.

Мой запрос выглядит так:

using (WebClient c = new WebClient())
{
    var response = c.DownloadString("https://nzbindex.com/search/json?sort=agedesc&hidespam=1&q=Ubuntu");
    Console.WriteLine(response);  
    //...
}

Это нормально работало в моей основной функции и при ее выполнении в потоке, созданном вручную. Но он вызывает ошибки при запуске кода, вырезанного в функции, которая вызывается из ThreadPool следующим образом: ThreadPool.QueueUserWorkItem(CheckMethod, item);

Ошибки, возникающие при запуске с ThreadPool, выглядят следующим образом:

Thread was being aborted.
  at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_threads_state_poll()
  at System.Uri.GetComponentsHelper (System.UriComponents uriComponents, System.UriFormat uriFormat) <0x40a23510 + 0x00033> in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Uri.GetComponents (System.UriComponents components, System.UriFormat format) [0x00072] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Uri.GetParts (System.UriComponents uriParts, System.UriFormat formatAs) [0x00000] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Uri.get_Query () [0x00041] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Net.WebClient.GetUri (System.Uri address) [0x00035] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Net.WebClient.GetUri (System.String address) [0x0004c] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at System.Net.WebClient.DownloadString (System.String address) [0x00000] in <4e15bbae9d7043d8afd6cfd50bd9bd5a>:0 
  at (wrapper remoting-invoke-with-check) System.Net.WebClient.DownloadString(string)
  at DBErrorcheck.Program.CheckThread (System.Object o) [0x00039] in <cf4c719a35df4ff094732dd5a9e883e9>:0 

Отладка не особо помогает, так как программа останавливается после выполнения DownloadString

1 Ответ

0 голосов
/ 13 июля 2020

Я только что нашел ответ на эту проблему, пытаясь создать минимально воспроизводимый пример.

Эта ошибка, похоже, вызвана, когда поток в ThreadPool все еще работает, но основной уже завершился. Я узнал об этом, потому что с помощью Thread.Sleep(500) это исправлено для меня.

Думаю, лучший способ - проверить, остались ли в пулах какие-то рабочие места.

...