【问题标题】:Using thread in aspx-page making a webrequest在 aspx-page 中使用线程发出 webrequest
【发布时间】:2010-06-17 14:28:31
【问题描述】:

我有一个 aspx 页面,它接受一些输入并发出请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("{0}?{1}", strPostPath, strPostData));
  request.Method = "GET";
  request.Timeout = 5000; // set 5 sec. timeout
  request.ProtocolVersion = HttpVersion.Version11;

   try
   {
       HttpWebResponse response = (HttpWebResponse)request.GetResponse();
       /do some with response       
   }
   catch (WebException exce)
   {

       //Log some stuff
   }

问题是这个函数用了很多

在单独的线程中发出每个请求有什么好处吗?具体会是什么样子?

【问题讨论】:

    标签: c# multithreading webrequest


    【解决方案1】:

    在 ASP.NET 中使用多线程时必须考虑一些问题。

    首先,您必须意识到每个 ASP.NET 页面请求都到达不同的工作线程。已经有很多线程在使用了!

    其次,在您的示例中,页面似乎必须等待响应才能将 HTML 返回给浏览器。使用多个线程不会节省任何时间,因为页面仍然需要等待结果。

    您可能获得的一个好处来自上述两个问题的组合。如果您的页面在等待来自 Web 请求的响应时被阻止,那么这意味着您在等待响应时正在阻止工作线程。该工作线程可能正在为另一个页面请求提供服务。这会影响可扩展性。

    如果可伸缩性成为问题,您可以使用异步页面来缓解这种情况下的问题。使用此模型,当页面开始等待 Web 请求时,页面将控制权返回给 ASP.NET。然后工作线程可以服务另一个请求。当来自 web 请求的响应到达时,页面可以继续处理。同时,您宝贵的工作线程不会花时间无所事事。

    见:

    【讨论】:

      【解决方案2】:

      在单独的线程上执行此操作的好处是在检索请求时您的线程不会阻塞。

      但是,不建议实际创建线程并执行它;你最终会遇到很多同步问题——什么时候完成以及如何获得结果等。最好使用异步方法(仍然使用另一个线程),因为它允许你简单地指定一个方法在检索到请求时调用。

      对于HttpWebRequest.GetResponse,异步方法为HttpWebRequest.BeginGetResponse

      【讨论】:

      • 我不得不投反对票,因为您没有提及任何特定于 ASP.NET 页面的问题。
      猜你喜欢
      • 2017-01-15
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多