태그 보관물: c#-8.0

c#-8.0

사용과 사용 대기의 차이점은 무엇입니까? 어떤 것을 사용할지 어떻게 결정할 수 있습니까? Studio 에서이 작업을 수행하는 것이

경우에 따라 Visual Studio 에서이 작업을 수행하는 것이 좋습니다.

await using var disposable = new Disposable();
// Do something

이 대신

using var disposable = new Disposable();
// Do something

차이점은 무엇이며 using그리고 await using?

사용할 것을 어떻게 결정해야합니까?



답변

사용하여 클래식 동기화

클래식 사용 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 를 반환 합니다. 관리되지 않는 리소스를 소유 한 클래스는이 메서드를 구현하며 이러한 클래스의 소비자는 더 이상 필요하지 않은 개체에서이 메서드를 호출합니다.


답변