我有一个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 。
在单独的线程中制作每个请求是否有任何优势,具体如何?
答案 0 :(得分:0)
在ASP.NET中使用多个线程时必须考虑一些问题。
首先,您必须意识到每个ASP.NET页面请求都会到达不同的工作线程。已经有很多线程在使用了!
其次,在您的示例中,似乎页面必须等待响应才能将HTML返回到浏览器。您不会通过使用多个线程来节省任何时间,因为页面仍然需要等待结果。
您可能实现的一个好处来自上述两个问题的组合。如果您的页面被阻止等待来自Web请求的响应,那么这意味着您在等待响应时正在阻止工作线程。该工作线程可以改为为另一个页面请求提供服务。这可能会影响可扩展性。
如果可伸缩性成为问题,您可以使用异步页面来缓解此情况下的问题。使用此模型,当页面开始等待Web请求时,页面将控制权返回给ASP.NET。然后,工作线程可以服务另一个请求。当来自Web请求的响应到达时,页面可以继续处理。与此同时,你宝贵的工作者不会把时间都花在上面。
请参阅:
答案 1 :(得分:-1)
在单独的线程上执行此操作的优点是,在检索请求时,您的线程不会阻塞。
但是,不推荐实际创建线程并执行它。你最终遇到了很多同步问题 - 什么时候完成,你将如何获得结果等。最好使用异步方法(仍使用另一个线程),因为它允许你简单地指定一个方法在检索到请求时调用。
对于HttpWebRequest.GetResponse
,异步方法为HttpWebRequest.BeginGetResponse