Webresponse.close ()에게 전화 할 때
-
19-09-2019 - |
문제
WebResponse response;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
response = request.GetResponse();
request = (HttpWebRequest)WebRequest.Create(url2);
response = request.GetResponse();
}
catch(Exception ex)
{
//do something
}
finally
{
}
응답은 어디에서 클로즈 ()를 호출해야합니까?
시도한 모든 getResponse () 후에?
마지막으로 getResponse ()가 시도한 후 - 한 번?
- 마침내 블록?
해결책
위의 어느 것도. 당신은 a를 사용해야합니다 using
차단하다:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
using (WebResponse response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
var result = reader.ReadToEnd();
// Do something with result
}
}
}
ㅏ using
블록은 예외가 있는지 여부에 관계없이 처분 방법이 호출되도록합니다. 처분은 가까운 것과 같은 일을합니다.
using (var d = new DisposableClass()){code;}
다음과 같습니다.
DisposableClass d = null;
try
{
d = new DisposableClass();
code;
}
finally
{
if (d != null)
((IDisposable)d).Dispose();
}
다른 팁
마침내 블록에 넣으십시오. 에 따라 MSDN:
마지막으로 블록은 시도 블록에 할당 된 리소스를 정리하고 예외가 있더라도 실행 해야하는 코드를 실행하는 데 유용합니다. Try Block이 어떻게 종료되는지에 관계없이 제어는 항상 최종 블록으로 전달됩니다.
블록을 사용하여 중첩 된 중첩은 곱슬 괄호가 필요하지 않으므로 가독성을 향상시킵니다. 따라서 John Saunder의 코드는 다음과 같습니다.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
var result = reader.ReadToEnd();
// Do something with result
}
Vs.net은 이러한 중첩 블록이 들여 쓰기가 필요하지 않다는 것을 이해합니다. BTW는 응답의 인코딩을 알고 있거나 어쨌든 무시할 경우 WebClient는 더 간단한 API- 헤더 정보를 제공하므로 헤더 기반 (전송/텍스트) 인코딩 감지가 불가능 해지지만 그렇지 않으면 잘 작동합니다.
아래를 제안합니다
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
request.Timeout = 20000;
using (var response = request.GetResponse())
{
//Do something with response.
}
request = (HttpWebRequest)WebRequest.Create("http://www.bing.com");
using (var response = request.GetResponse())
{
//Do somehing with response
}
}
catch (Exception ex)
{
//do something
}
finally
{
}
제휴하지 않습니다 StackOverflow