[英]Using thread in aspx-page making a 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
}
關鍵是該功能被大量使用 。
在單獨的線程中發出每個請求是否有任何好處,並且確切看起來是什么樣子?
在ASP.NET中使用多個線程時,必須考慮一些問題。
首先,您必須意識到每個ASP.NET頁面請求都到達不同的工作線程。 已經有很多線程在使用中!
其次,在您的示例中,頁面似乎必須等待響應,然后才能將HTML返回給瀏覽器。 您不會通過使用多個線程來節省任何時間,因為頁面仍必須等待結果。
您可能獲得的一個好處來自上述兩個問題的結合。 如果您的頁面在等待Web請求的響應而被阻止,則意味着您在等待響應時阻止了工作線程。 該工作線程可以替代地服務另一個頁面請求。 這會影響可伸縮性。
如果可伸縮性成為問題,則在這種情況下,可以使用“異步頁面”來緩解此問題。 使用此模型,當頁面開始等待Web請求時,頁面將控制權返回給ASP.NET。 然后,工作線程可以處理另一個請求。 當Web請求的響應到達時,頁面可以繼續處理。 同時,您寶貴的工作線程不會花時間做任何事情。
看到:
在單獨的線程上執行此操作的優點是,在檢索請求時,您的線程不會阻塞。
但是,不建議實際創建一個線程並執行它。 您最終會遇到許多同步問題-何時完成以及如何獲得結果等。最好使用異步方法(仍然使用另一個線程),因為它允許您簡單地指定要使用的方法檢索到請求后調用。
對於HttpWebRequest.GetResponse
,異步方法是HttpWebRequest.BeginGetResponse
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.