Почему HTTPWebRespnse занимает больше времени, даже если HTTPWebRequest отправляется давно?

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

     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 запускалась немедленно. Как я могу этого добиться?

Спасибо.


person om471987    schedule 01.04.2012    source источник
comment
Это действительно связано с двумя версиями C #? Если нет, удалите эти теги!   -  person ThiefMaster    schedule 01.04.2012


Ответы (1)


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

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

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

person Jon Skeet    schedule 01.04.2012
comment
Спасибо, Джон. Я отправляю 10 запросов на этот сервер, и выполнение этого потока занимает почти 25 секунд. Но поскольку запрос не запускается, пока я не скажу getResponse, я ничего не могу сделать. Большое спасибо... - person om471987; 01.04.2012
comment
@Omkarpanhalkar: Если вы отправляете их все примерно в одно и то же время, пул соединений вполне может ограничить вас - вероятно, это, вероятно, только на самом деле отправка 4 за раз. Вы можете рассмотреть возможность увеличения размера пула. - person Jon Skeet; 01.04.2012