簡體   English   中英

在aspx頁面中使用線程進行Web請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM