반응형
사용 문 안에 예외가 발생해도 Dispose가 계속 호출됩니까?
아래 예제에서, 연결이 닫히고 다음 범위 내에 있는 경우 예외가 발생할 때 처리됩니까?using
진술서?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
아래의 이 코드가 확실히 그렇게 할 것이라는 것을 알지만, 나는 명세서를 사용하는 것이 어떻게 하는지 궁금합니다.
var conn;
try
{
conn = new SqlConnection("...");
conn.Open();
// stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
conn.Dispose();
}
관련:
예외가 발생했을 때 SQL 연결을 닫으려면 어떻게 해야 합니까?네.using
당신의 코드를 시도/실행 블록으로 감싼다.finally
몫은 부를 것입니다.Dispose()
만약 있다면,하지만 전화는 하지 않을 것입니다.Close()
그것은 오직 그것을 확인하기 때문에 직접.IDisposable
구현 중인 인터페이스와 그에 따라Dispose()
방법.
참고 항목:
- ID 내에서 예외를 가로채는 것은 취소할 수 있습니다.처분
- 예외가 발생했을 때 SQL 연결을 닫으려면 어떻게 해야 합니까?
- C# "사용" 구문
- C# 키워드 사용 - 언제, 언제 사용하지 않을 것인가요?
- '사용' 문 vs '마지막으로 시도'
- C# Using block이란 무엇이며 왜 사용해야 합니까?
- 패턴을 사용한 일회용
- 사용을 종료하면 열려 있는 SQL 연결이 닫힙니다.
리플렉터가 코드에서 생성된 IL을 디코딩하는 방법은 다음과 같습니다.
개인 정적 void 기본(string[] 인수){SqlConnection conn = 새 SqlConnection("...");해라{커넥트열기();DoStuff();}마침내.{if (interval!= null){커넥트폐기();}}}
그래서 대답은 "예"입니다. 연결이 닫힙니다.
DoStuff()throws an exception.
Dispose()는 이 코드에서 호출되지 않습니다.
class Program {
static void Main(string[] args) {
using (SomeClass sc = new SomeClass())
{
string str = sc.DoSomething();
sc.BlowUp();
}
}
}
public class SomeClass : IDisposable {
private System.IO.StreamWriter wtr = null;
public SomeClass() {
string path = System.IO.Path.GetTempFileName();
this.wtr = new System.IO.StreamWriter(path);
this.wtr.WriteLine("SomeClass()");
}
public void BlowUp() {
this.wtr.WriteLine("BlowUp()");
throw new Exception("An exception was thrown.");
}
public string DoSomething() {
this.wtr.WriteLine("DoSomething()");
return "Did something.";
}
public void Dispose() {
this.wtr.WriteLine("Dispose()");
this.wtr.Dispose();
}
}
언급URL : https://stackoverflow.com/questions/518352/does-dispose-still-get-called-when-exception-is-thrown-inside-of-a-using-stateme
반응형
'programing' 카테고리의 다른 글
XAML을 사용하지 않는 WPF (0) | 2023.05.06 |
---|---|
부모와 관련된 자식 요소의 위치를 얻으려면 어떻게 해야 합니까? (0) | 2023.05.06 |
파이썬 문자열 앞에 있는 b 접두사는 무엇을 의미합니까? (0) | 2023.05.06 |
사용 안 함 경고: DB 클래스의 이벤트 수신이 사용되지 않으며 다음 주 버전에서 제거됩니다. (0) | 2023.05.06 |
커넥터 버전이 변경된 경우 SpringBoot 앱이 MariDB에 연결할 수 없음 (0) | 2023.05.01 |