Уничтожение объекта 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();
  }
}

Ответы на вопрос(3)

Ваш ответ на вопрос