문제

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
        {
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top