Почему HTTPWebRespnse занимает больше времени, даже если HTTPWebRequest отправляется в течение долгого времени назад? - PullRequest
0 голосов
/ 01 апреля 2012

Привет, проверь этот код.

     var watch = new Stopwatch();
     watch.Start();
     var request = HttpWebRequest.Create(new Uri("http://localhost:59449/stwebapi/chat?userId=john")) as HttpWebRequest;
     Console.WriteLine(watch.Elapsed);

     Thread.Sleep(5000);

     watch.Restart();
     var response = request.GetResponse();
     Console.WriteLine(watch.Elapsed);

Я отправил веб-запрос, долго ждал, а затем получил ответ.Тем не менее, ответ занял больше времени, чтобы выполнить.Результат, который я получил, был

00:00:00.1142339
00:00:03.1365544

Почему ответ занял у меня 3 секунды?Та же самая задержка ответа есть с асинхронным ответом.

Я хочу, чтобы функция GetResponse была выполнена немедленно.Как я могу этого достичь?

Спасибо.

1 Ответ

4 голосов
/ 01 апреля 2012

Я сильно подозреваю, что до тех пор, пока вы не позвоните GetResponse, запрос даже не будет отправлен ... так что ваш Thread.Sleep в принципе не приносит вам никакой пользы.

Почему бы вам просто не позвонить GetResponse немедленно? Если это займет 3 секунды, то, вероятно, именно столько времени понадобилось веб-серверу, чтобы ответить на ваш запрос ...

(Кроме того, вы должны использовать оператор using, чтобы убедиться, что вы избавляетесь от WebResponse; в противном случае у вас закончится тайм-аут запросов, поскольку пул соединений ожидает, когда соединение станет доступным. ) * +1010 *

...