Вопрос

Я пытался получить разъяснения по этому поводу:

Способ-1:

Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()

Способ-2:

Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using

Когда я использовал оба метода-1 и Метод-2 на своем локальном компьютере для подключения и получения ответа от удаленной машины X, оба они работали должным образом.

Когда я использовал этот код на удаленной машине Y для получения ответа от X, работал только Метод-1, а для Метода-2 я получаю

System.Net.WebException: The operation has timed out

В чем разница между Методами , упомянутыми выше , и в чем может быть возможная проблема ?

Это было полезно?

Решение

Using просто переводится в Try/Finally блок, который вызывает .Dispose() в Finally блок.Вы можете использовать Отражатель чтобы узнать, какой код генерируется.Вы также можете использовать его, чтобы взглянуть на то, что делает метод.В этом случае, Dispose() способ на HttpWebResponse делает не сделайте то же самое , что и Close() это означает, что здесь на самом деле есть семантические различия.

Using обычно преимущество заключается в том, что ресурсы, используемые объектом, освобождаются немедленно, когда он выходит за пределы области видимости.Это полезно для таких вещей, как GDI + или дескрипторы файлов, но в случае HttpWebResponse это могло бы быть немного по-другому.Не зная достаточно об этом конкретном объекте, я бы предположил, что Close()на самом деле это не высвобождает никаких ресурсов, поэтому нет необходимости в Dispose() звонки Close() слишком.И, возможно, для такого поведения есть веские причины.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top