답변:
클래식 사용 Dispose()
은 IDisposable
인터페이스를 구현하는 객체 의 메소드 를 호출합니다 .
using var disposable = new Disposable();
// Do Something...
에 해당
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
새로운 것은 호출을 사용하여 대기 DisposeAsync()
하고 IAsyncDisposable
인터페이스를 구현하는 객체 의 메소드를 기다 립니다.
await using var disposable = new AsyncDisposable();
// Do Something...
에 해당
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
IAsyncDisposable 인터페이스 에 추가되었습니다 .NET Core 3.0
하고 .NET Standard 2.1
.
.NET에서 관리되지 않는 리소스를 소유 한 클래스는 일반적으로 IDisposable 인터페이스를 구현하여 관리되지 않는 리소스를 동 기적으로 해제하는 메커니즘을 제공합니다. 그러나 경우에 따라 동기식 리소스 외에 (또는 대신) 관리되지 않는 리소스를 해제하기위한 비동기식 메커니즘 을 제공 해야합니다 . 이러한 메커니즘을 제공하면 소비자는 GUI 응용 프로그램의 메인 스레드를 오랫동안 차단하지 않고도 리소스 집약적 처분 작업을 수행 할 수 있습니다.
이 인터페이스 의 IAsyncDisposable.DisposeAsync 메서드 는 비동기 처리 작업을 나타내는 ValueTask 를 반환 합니다. 관리되지 않는 리소스를 소유 한 클래스는이 메서드를 구현하며 이러한 클래스의 소비자는 더 이상 필요하지 않은 개체에서이 메서드를 호출합니다.
await using
로모그래퍼IAsyncDisposable
하고 만 사용할 수 있습니다using
와IDisposable
다른에서 어느 하나를 상속하기 때문이다. 둘 중 하나를 사용할 수있는 유일한 시간은 구체적 클래스가 두 가지를 모두 구현하고 비동기 코드를 작성하는지 여부에 달려 있습니다.