c# – 使用Thread.Abort杀死HttpWebRequest对象

c# – 使用Thread.Abort杀死HttpWebRequest对象,第1张

概述所有,我试图使用类似于下面的代码的方法取消两个并发的HttpWebRequests(以伪ish C#显示). Main方法创建两个创建HttpWebRequests的线程.如果用户希望,他们可以通过单击按钮然后调用Abort方法来中止请求. private Thread first;private Thread second;private string uri = "http://somew 所有,我试图使用类似于下面的代码的方法取消两个并发的httpWebRequests(以伪ish C#显示).

Main方法创建两个创建httpWebRequests的线程.如果用户希望,他们可以通过单击按钮然后调用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();}

第一个线程被SocketException中断:

A blocking operation was interrupted by a call to WSACancelBlockingCall

第二个线程挂起在GetResponse()上.

如何以Web服务器知道连接已中止的方式中止这两个请求?和/或,是否有更好的方法来执行此 *** 作?

UPDATE

正如所建议的,一个很好的选择是使用BeginGetResponse.但是,我无法访问httpWebRequest对象 – 它在MyHandler类中被抽象化.我修改了这个问题来证明这一点.

public class MyHandler{  public voID RunRequest(string uri)  {    httpWebRequest req = httpWebRequest.Create(uri);    httpWebResponse res = req.GetResponse();  }}
解决方法 使用BeginGetResponse启动调用,然后使用类上的Abort方法取消它.

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest_methods.aspx

我相信Abort不能使用同步GetResponse:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.abort.aspx

如果你必须坚持同步版本,要杀死这种情况,你所能做的只是中止线程.要放弃等待,您可以指定超时:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx

如果你需要杀死进程,我会争辩在新的AppDomain中启动它并在你想杀死请求时删除AppDomain;而不是在主进程中中止一个线程.

总结

以上是内存溢出为你收集整理的c# – 使用Thread.Abort杀死HttpWebRequest对象全部内容,希望文章能够帮你解决c# – 使用Thread.Abort杀死HttpWebRequest对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存