在aspx页面中使用线程进行webrequest

时间:2010-06-17 14:28:32

标签: c# multithreading webrequest

我有一个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
   }

事情是这个函数用于 lot

在单独的线程中制作每个请求是否有任何优势,具体如何?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

请参阅:

答案 1 :(得分:-1)

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

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

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