WebClient DownloadString 在 ThreadPool 中不起作用

WebClient DownloadString not working in ThreadPool

我目前有一个项目,我尝试使用 C# 控制台应用程序从 NZBIndex.nl API 获取信息。

我的请求是这样的:

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 后停止

我刚刚在尝试制作一个最小的可重现示例时找到了这个问题的答案。

这个错误似乎是ThreadPool中的一个线程还在运行但是main已经退出了。我发现这个是因为 Thread.Sleep(500) 它为我修复了。

我想更好的方法是检查池是否还有剩余工作。