private bool disposedValue = false; // To detect redundant calls protected virtual async ValueTask Dispose(bool disposing) { if (!disposedValue) { if (disposing) { if (OnDisposed.HasDelegate) { await OnDisposed.InvokeAsync(EventArgs.Empty); } } disposedValue = true; } }