加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:19:55 所属栏目:百科 来源:网络整理
导读:所有,我试图使用类似于下面的代码的方法取消两个并发的HttpWebRequests(以伪ish C#显示). Main方法创建两个创建HttpWebRequests的线程.如果用户希望,他们可以通过单击按钮然后调用Abort方法来中止请求. private Thread first;private Thread second;private
所有,我试图使用类似于下面的代码的方法取消两个并发的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;而不是在主进程中中止一个线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读