Использование потока в aspx-странице для создания веб-запроса - PullRequest
1 голос
/ 17 июня 2010

У меня есть 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
   }

Дело в том, что эта функция используется лот .

Есть ли преимущество делать каждый запрос в отдельном потоке, и как именно это будет выглядеть?

Ответы [ 2 ]

0 голосов
/ 20 июня 2010

Существуют проблемы, которые необходимо учитывать при использовании нескольких потоков в ASP.NET.

Прежде всего, вы должны понимать, что каждый запрос страницы ASP.NET поступает в другой рабочий поток.Уже используется много потоков!

Во-вторых, в вашем примере кажется, что страница должна дождаться ответа, прежде чем вернуть HTML обратно в браузер.Вы не сэкономите время, используя несколько потоков, поскольку страница все еще должна ждать результата.

Единственное преимущество, которое вы можете получить, - это сочетание двух вышеупомянутых проблем.Если ваша страница заблокирована в ожидании ответа от веб-запроса, это означает, что вы задерживаете рабочий поток, ожидая ответа.Этот рабочий поток может вместо этого обслуживать другой запрос страницы.Это может повлиять на масштабируемость.

Если масштабируемость становится проблемой, вы можете использовать асинхронные страницы, чтобы устранить проблему в этом случае.В этой модели, когда страница начинает ожидать веб-запроса, она возвращает управление обратно в ASP.NET.Рабочий поток может затем обслуживать другой запрос.Когда приходит ответ от веб-запроса, страница может продолжить обработку.Тем временем ваши драгоценные рабочие потоки не тратят свое время на то, чтобы ничего не делать.

См .:

0 голосов
/ 17 июня 2010

Преимущество выполнения этого в отдельном потоке заключается в том, что ваш поток не будет блокироваться во время получения запроса.

Однако создание потока и его выполнение не рекомендуется;у вас возникает много проблем с синхронизацией - когда это будет сделано, как вы получите результаты и т. д. Лучше всего использовать асинхронный метод (который все еще использует другой поток), поскольку он позволяет вам просто указать метод, который будетвызывается при получении запроса.

Для HttpWebRequest.GetResponse асинхронный метод - HttpWebRequest.BeginGetResponse

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...