C# 프로그래밍 기초 실습 전자책
catch/finally 블럭에서 await 사용

C# 5.0에서 await 기능을 도입할 때, catch 나 finally 블럭에서 await를 사용하는 기능을 지원하지 않았다. 이 때문에 개발자들은 여러 Workaround를 사용했어야 했었는데, 이제 C# 6.0 에서는 이를 기본적으로 지원하게 되었다. catch 블럭에서 일반적으로 에러를 로깅을 하는 경우가 많은데, 이 때 로깅처리를 비동기적으로 하기 위해 await를 사용할 수 있다.

예제

IDbConnection conn;
try
{
    //...
    var response = await req.GetResponseAsync();
    //...
}
catch (Exception ex)
{
    //에러를 비동기로 로깅
    await Log(ex);
}            
finally
{
    //Close를 비동기로 처리
    await Close(conn);
}




Exception Filter 지원

VB.NET 이나 F# 에서는 이미 지원되고 있었지만, C#에는 지금까지 지원되지 않았던 것으로 Exception Filter라는 것이 있다. Exception Filter란 catch 시 특정한 조건으로만 다시 필터링하는 하여 catch하는 것으로, C# 6.0 문법에서는 catch() 문 뒤에 추가적인 when 조건문을 사용하게 된다.
예를 들어 아래 예제처럼, Win32Exception 에러가 발생했을 때, 이 Exception 객체의 내부 속성인 NativeErrorCode을 추가적으로 조사해서 그 값이 0x10 인 경우에만 catch 블럭이 실행하도록 하는 기능이다.


예제

// Exception Filter
try
{
    //...
}
catch(Win32Exception ex) when (ex.NativeErrorCode == 0x10)
{
    Log(ex);
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment spowner@*** 6/22/2015 4:09:53 AM
Comment admin@*** 8/25/2015 2:46:12 PM

Comment 의견/코멘트 쓰기
이메일
 *정확한 이메일이 아닐 경우 삭제될 수 있습니다
의견/코멘트
좌측의 3자리 문자들을 입력해 주십시오





아티클 모바일 링크
C# 스터디 소셜미디어
쉽게 배우는 파이썬 기초