HttpWebResponse — правильное удаление соединения

#c# #.net #httpwebrequest #httpwebresponse

#c# #.net #httpwebrequest #httpwebresponse

Вопрос:

Я работаю над менеджером загрузок на C #, использую несколько http-запросов, и мне было интересно, как можно убедиться, что соединение правильно закрыто?

Достаточно ли вызвать Dispose в потоке ответов? Нужно ли мне также вызывать Close? Не уверен, что что-то может пойти не так, но в какой-то момент веб-сайт перестанет отвечать.

Спасибо!

Ответ №1:

Оберните свой HttpWebResponse в блок using:

 using(HttpWebResponse response = request.GetResponse())
{
    // do stuff here
} // response object is automatically disposed of here. 
  

Комментарии:

1. Я знаком с инструкцией using, но я уже вызываю Dispose () после того, как я закончил, есть ли в этом какая-то разница?

2. Когда вы используете using подобным образом, вам не нужно беспокоиться о вызове Dispose самостоятельно, компилятор позаботится об этом за вас.

Ответ №2:

Как упоминал Кайл, оберните ваш HttpWebResponse в блок using . Но если GetResponse() выдает исключение (что происходит, например, при ответе 404), вам нужно захватить HttpWebResponse в исключении.

 HttpWebResponse webResponse = null;
try {
    webResponse = (HttpWebResponse)webRequest.GetResponse();
} catch (WebException e) {
    webResponse = (HttpWebResponse)e.Response;
    if (webResponse == null) {
        // Handle this.
    }
}    
using (webResponse) {
    // Process the response.
}