С IDisposable
я часто использовал абстрактный базовый класс, потому что реализовать его было очень сложно.Главным образом потому, что вы можете использовать интерфейс для удаления как управляемых, так и неуправляемых ссылок, и каждая из них расположена по-разному.
public abstract class Disposable : IDisposable
{
~Disposable() => this.Dispose(false);
public bool IsDisposed { get; private set; }
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void DisposeManaged() {}
protected virtual void DisposeUnmanaged() {}
protected void ThrowIfDisposed()
{
if (this.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
}
private void Dispose(bool disposing)
{
if (!this.IsDisposed)
{
if (disposing)
{
this.DisposeManaged();
}
this.DisposeUnmanaged();
this.IsDisposed = true;
}
}
}
С IAsyncDisposable
я не могу найти эталонную реализацию.Кроме того, я считаю, что он обрабатывает только управляемые ресурсы в основном потому, что он настолько новый и не существует неуправляемых ресурсов, которые требуют асинхронного удаления.Это верно?Если да, то является ли реализация тогда тривиальной?