문제

내 수업에 다음 코드가 있습니다.이 클래스의 목적은 웹 서버에서 잔액을 가져오는 것입니다.균형을 맞추는 데 문제가 있는 경우를 대비해.예외를 처리하겠습니다.그러나 이 모든 작업은 쉽습니다.하지만 catch 문에서 무엇을 반환해야 하는지 궁금합니다.

제가 살펴본 대부분의 예제는 다음을 사용하여 콘솔에 작성했습니다.

Console.WriteLine(ex.Message);

그것은 모두 아주 좋습니다.하지만 실제 애플리케이션에서 대부분의 개발자는 무엇을 합니까?

 //Download only when the webclient is not busy.
        if (!wc.IsBusy)
        { 
            // Sleep for 1/2 second to give the server time to update the balance.
            System.Threading.Thread.Sleep(500);

            try
            {
                // Download the current balance.
                wc.DownloadStringAsync(new Uri(strURL));
            }
            catch (WebException ex)
            {
                Console.Write("GetBalance(): " + ex.Message);
            }
        }
        else
        {
            Console.Write("Busy please try again");
        }

현재 내 기능은 무효를 반환합니다.그리고 웹 클라이언트가 바쁜 경우 무엇을 더 반환할지 궁금합니다.

어떤 조언이라도 감사드립니다.

도움이 되었습니까?

해결책

처리할 수 없는 경우 예외를 포착하지 마세요. 일부 값만 반환하는 경우 호출 메서드는 값이 실제 결과인지 아니면 단지 예외 표시인지 확인해야 합니다.이제 이 메서드는 무엇을 수행하고 반환할지 결정해야 합니다.그리고 이 메서드를 호출하는 메서드입니다.그리고 방법은...

따라서 예외가 스택에 버블링되도록 하고 처리할 수 있는 곳에서 예외를 잡으세요.사용자 인터페이스 바로 아래에 사용자가 다시 시도할지 묻는 메시지 상자를 표시하거나 문제 해결 방법에 대한 정보를 표시할 수도 있습니다.사용자 인터페이스가 없다면 문제를 해결할 수 있는 곳에서 찾아 다시 시도하세요.일시적인 문제라면 호출이 성공할 때까지 합리적인 수준에서 전체 작업을 다시 시도하세요.

무언가를 기록하려면 다음 패턴을 사용하여 예외를 기록하고 다시 발생시키세요.

try
{
   DoStuff();
}
catch (Exception exception)
{
   Log(exception.ToString());

   throw;
}

참고하세요 throw; 그리고는 아니다 throw exception;.나중에 수행하면 원래 스택 추적이 손실됩니다.예외 원인에 대한 자세한 내용을 추론할 수 있는 경우 추가 정보를 사용하여 발견된 예외를 보다 의미 있는 예외로 래핑해야 합니다.

try
{
   DoStuff();
}
catch (SpecificMeaninglessException exception)
{
   Log(exception.ToString());

   throw new MeaningfulException("Details about the error.", exception);
}
catch (Exception exception)
{
   Log(exception.ToString());

   throw;
}

다른 팁

ex.tostring () 메소드를 사용해야합니다

예외는 예외에 대한 간단한 설명을 포함합니다 (예 : "객체 참조가 설정되지 않습니다 ...").

Exception.toString ()에는 완전한 스택 트레이스와 함께 예외에 대한 설명이 포함되어 있습니다.

.NET의 예외 처리 모범 사례

클라이언트가 바쁘지만 다시 시작하기 전에 특정 시간을 기다릴 수있는 방법을 다시 실행할 수 있습니까? 잠재적으로 X 재원 후 고장이 발생합니다.

대신 계속해서 문제를 기록하고 단순히 로그인하려면 Catch 문은 파일 기반 로그, 이벤트 뷰어, 데이터베이스에 제출하고 필요한 경우 경고 (이메일, SMS 등)에 예외를 기록 할 수 있습니다.

예외의 심각성에 따라 다릅니다.

나는 조사하는 것이 좋습니다 패턴 및 관행에서 예외 블록

예외를 보는 데만 관심이 있다면 예외를 다시 던져서 누가 처리 할 계획이라면 여전히 그것을 얻을 수 있습니다.

당신은 확실히 처리되지 않은 예외를 숨기고 싶지 않습니다. 스택을 통해 거품을 올리십시오. 그러나 웹 클라이언트가 바쁘다면 무엇을 반환 해야하는지 묻는 경우, 균형을 다시 다운로드하기 전에 임의의 간격 또는 기능 발신자가 기다려야하는 의미있는 간격을 반환하는 것은 어떻습니까? 임의의 숫자는 부하를 배포하거나 충돌 문제를 완화 할 수 있습니다. 더 의미있는 간격은 서버의 현재 상태에 따라 다시 전송 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top