Уничтожение объекта HttpWebRequest с помощью Thread.Abort
Все, я пытаюсь отменить два одновременных HttpWebRequests, используя метод, подобный коду ниже (показан в псевдо-иш C #).
Метод Main создает два потока, которые создают запросы HttpWebRequests. Если пользователь пожелает, он может прервать запросы, нажав кнопку, которая затем вызывает метод Abort.
private Thread first;
private Thread second;
private string uri = "http://somewhere";
public void Main()
{
first = new Thread(GetFirst);
first.Start();
second = new Thread(GetSecond);
second.Start();
// Some block on threads... like the Countdown class
countdown.Wait();
}
public void Abort()
{
try
{
first.Abort();
}
catch { // do nothing }
try
{
second.Abort();
}
catch { // do nothing }
}
private void GetFirst(object state)
{
MyHandler h = new MyHandler(uri);
h.RunRequest();
}
private void GetSecond(object state)
{
MyHandler h = new MyHandler(uri);
h.RunRequest();
}
Первый поток прерывается SocketException:
A blocking operation was interrupted by a call to WSACancelBlockingCall
Второй поток висит на GetResponse ().
Как я могу прервать оба этих запроса таким образом, чтобы веб-сервер знал, что соединение было прервано?и / или,Есть лучший способ сделать это?
ОБНОВИТЬ
Как и предполагалось, хорошей альтернативой было бы использование BeginGetResponse. Однако у меня нет доступа к объекту HttpWebRequest - он абстрагируется вMyHandler
учебный класс. Я изменил вопрос, чтобы показать это.
public class MyHandler
{
public void RunRequest(string uri)
{
HttpWebRequest req = HttpWebRequest.Create(uri);
HttpWebResponse res = req.GetResponse();
}
}