Matando o objeto HttpWebRequest usando Thread.Abort

Tudo, estou tentando cancelar dois HttpWebRequests simultâneos usando um método semelhante ao código abaixo (mostrado no pseudo-ish C #).

O método Main cria dois threads que criam HttpWebRequests. Se o usuário desejar, ele pode abortar as solicitações clicando em um botão que chama o método 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();
}

O primeiro thread é interrompido por uma SocketException:

A blocking operation was interrupted by a call to WSACancelBlockingCall

O segundo segmento trava em GetResponse ().

Como posso cancelar essas duas solicitações de forma que o servidor da Web saiba que a conexão foi interrompida?e / ouExiste uma maneira melhor de fazer isso?

ATUALIZAR

Como sugerido, uma boa alternativa seria usar o BeginGetResponse. No entanto, não tenho acesso ao objeto HttpWebRequest - ele é abstraído noMyHandler classe. Eu modifiquei a pergunta para mostrar isso.

public class MyHandler
{
  public void RunRequest(string uri)
  {
    HttpWebRequest req = HttpWebRequest.Create(uri);
    HttpWebResponse res = req.GetResponse();
  }
}

questionAnswers(3)

yourAnswerToTheQuestion