Killing HttpWebRequest-Objekt mit Thread.Abort

Alle, ich versuche, zwei gleichzeitige HttpWebRequests mit einer Methode abzubrechen, die dem folgenden Code ähnelt (in pseudo-ish C # gezeigt).

Die Main-Methode erstellt zwei Threads, die HttpWebRequests erstellen. Wenn der Benutzer möchte, kann er die Anforderungen abbrechen, indem er auf eine Schaltfläche klickt, die dann die Abort-Methode aufruft.

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

Der erste Thread wird von einer SocketException unterbrochen:

A blocking operation was interrupted by a call to WSACancelBlockingCall

Der zweite Thread hängt an GetResponse ().

Wie kann ich beide Anforderungen so abbrechen, dass der Webserver weiß, dass die Verbindung abgebrochen wurde?, und / oder, Gibt es einen besseren Weg, dies zu tun?

AKTUALISIERE

Wie vorgeschlagen, ist die Verwendung von BeginGetResponse eine gute Alternative. Ich habe jedoch keinen Zugriff auf das HttpWebRequest-Objekt - es wird im @ abstrahierMyHandler Klasse. Ich habe die Frage geändert, um dies anzuzeigen.

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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage