Это может быть из-за пула соединений .NET.
Каждый экземпляр WebRequest имеет ServicePoint, который описывает цель, с которой вы хотите связаться (адрес сервера, порт, протокол, ...). Эти ServicePoints будут использоваться повторно, поэтому, если вы создадите 2 веб-запроса с одинаковым адресом сервера, портом и протоколом, они будут использовать один и тот же экземпляр ServicePoint.
Когда вы вызываете WebRequest.GetResponse (), он использует пул соединений, предоставленный ServicePoint, для создания соединений. Если вы затем уничтожите поток с помощью Thread.Abort (), он НЕ вернет соединение в пул соединений ServicePoint, поэтому ServicePoint считает, что это соединение все еще используется.
Если достигнут предел количества подключений к ServicePoint (по умолчанию: 2), он не будет создавать никаких новых подключений, а вместо этого будет ожидать возврата одного из открытых подключений.
Вы можете увеличить лимит подключения следующим образом:
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.ServicePoint.ConnectionLimit = 10;
или вы можете использовать ограничение по умолчанию для подключения, поэтому каждый новый ServicePoint будет использовать этот предел:
System.Net.ServicePointManager.DefaultConnectionLimit = 10;
Вы также можете использовать ServicePoint.CurrentConnections, чтобы получить количество открытых соединений.
Вы можете использовать следующий метод для прерывания вашей темы:
private Thread thread;
private Uri uri;
void StartThread()
{
thread = new Thread(new ThreadStart(() =>
{
WebRequest request = WebRequest.Create(uri);
request.ConnectionGroupName = "SomeConnectionGroup";
var response = request.GetResponse();
//...
}));
thread.Start();
}
void AbortThread()
{
thread.Abort();
ServicePointManager.FindServicePoint(uri).CloseConnectionGroup("SomeConnectionGroup");
}
Помните, что ВСЕ соединения с одним и тем же сервером (или ServicePoint) с одинаковым именем группы соединений будут прерваны. Если у вас несколько одновременных потоков, вы можете назначить им уникальные имена групп соединений.