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