Kullanarak klasik senkronizasyon
Classic using Dispose()
, IDisposable
arabirimi uygulayan bir nesnenin yöntemini çağırır .
using var disposable = new Disposable();
// Do Something...
Eşittir
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
Yeni eşzamansız kullanım bekliyor
Yeni, çağrıları kullanmayı ve arabirimi DisposeAsync()
uygulayan bir nesnenin yöntemini bekliyor IAsyncDisposable
.
await using var disposable = new AsyncDisposable();
// Do Something...
Eşittir
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
IAsyncDisposable Arayüz ilave edildi .NET Core 3.0
ve .NET Standard 2.1
.
.NET'te, yönetilmeyen kaynaklara sahip sınıflar genellikle yönetilmeyen kaynakları eşzamanlı olarak serbest bırakmak için bir mekanizma sağlamak üzere IDisposable arabirimini uygular . Bununla birlikte, bazı durumlarda , senkronize olana ek olarak (veya bunun yerine) yönetilmeyen kaynakları serbest bırakmak için asenkron bir mekanizma sağlamaları gerekir . Böyle bir mekanizma sağlanması, tüketicinin bir GUI uygulamasının ana iş parçacığını uzun süre engellemeden, kaynak yoğun imha işlemleri gerçekleştirmesini sağlar.
IAsyncDisposable.DisposeAsync bu arayüz yöntemi, döner ValueTask uyumsuz imha işlemi temsil eder. Yönetilmeyen kaynaklara sahip sınıflar bu yöntemi uygular ve bu sınıfların tüketicisi artık gerekli olmadığında bu yöntemi bir nesne üzerinde çağırır.
await using
bir ileIAsyncDisposable
ve sadece kullanabilirsinizusing
bir ileIDisposable
diğerinden ne biri INHERITS beri. Her ikisini de kullanabileceğiniz zaman somut sınıfın her ikisini de uygulayıp uygulama zaman uyumsuz kod yazıp yazmadığına bağlıdır.