반응형
using 문 내에서 예외가 throw되면 Dispose가 계속 호출됩니까?
아래 예에서 연결이 using
문 내에있는 경우 예외가 throw되면 연결이 닫히고 삭제 됩니까?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
아래의 코드가이를 확인한다는 것을 알고 있지만 using 문이 어떻게 작동하는지 궁금합니다.
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
try / finally 블록에 코드를 래핑 합니다. 그러나 구현중인 인터페이스와 그에 따른 메서드 만 확인하므로 직접 호출하지 않습니다 .finally
Dispose()
Close()
IDisposable
Dispose()
또한보십시오:
- IDisposable.Dispose 내부에서 예외 차단
- 예외가 발생할 때 SQL 연결이 닫히도록하는 적절한 방법은 무엇입니까?
- C # "사용"구문
- C # USING 키워드-사용하지 않는시기와시기
- '사용'문 대 '마지막으로 시도'
- C # Using 블록이란 무엇이며 왜 사용해야합니까?
- 패턴을 사용하여 일회용
- 열린 SQL 연결 닫기를 사용하여 종료합니까?
리플렉터가 코드에 의해 생성 된 IL을 디코딩하는 방법은 다음과 같습니다.
private static void Main (string [] args) { SqlConnection conn = new SqlConnection ( "..."); 시험 { conn.Open (); DoStuff (); } 드디어 { if (conn! = null) { conn.Dispose (); } } }
그래서 대답은 '예'입니다.
DoStuff ()예외가 발생합니다.
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();
}
}
반응형
'IT story' 카테고리의 다른 글
자바 스크립트 개체의 속성을 삭제 / 설정 해제하는 방법은 무엇입니까? (0) | 2020.08.30 |
---|---|
Java 클래스 파일 생성이 결정적입니까? (0) | 2020.08.30 |
InnoDB로 전체 텍스트 검색 (0) | 2020.08.30 |
SQLite-다른 데이터베이스의 테이블을 어떻게 조인합니까? (0) | 2020.08.30 |
jQuery의 mouseout ()과 mouseleave ()의 차이점은 무엇입니까? (0) | 2020.08.30 |