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