Matar el objeto HttpWebRequest usando Thread.Abort

Todos, estoy tratando de cancelar dos HttpWebRequests simultáneas usando un método similar al siguiente código (que se muestra en pseudo-ish C #).

El método Main crea dos hilos que crean HttpWebRequests. Si el usuario lo desea, puede cancelar las solicitudes haciendo clic en un botón que luego llama al método Abortar.

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();
}

El primer subproceso se ve interrumpido por una SocketException:

A blocking operation was interrupted by a call to WSACancelBlockingCall

El segundo hilo se cuelga en GetResponse ().

¿Cómo puedo cancelar estas dos solicitudes de manera que el servidor web sepa que la conexión se ha cancelado?y / o¿Hay una mejor manera de hacer esto?

ACTUALIZAR

Como se sugirió, una buena alternativa sería usar BeginGetResponse. Sin embargo, no tengo acceso al objeto HttpWebRequest, se abstrae en elMyHandler clase. He modificado la pregunta para mostrar esto.

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta