public async ValueTask DisposeAsync() { IAsyncDisposable[] disposables; lock (_lock) { if (_isClosed) { return; } _isClosed = true; disposables = _disposabels.ToArray(); } foreach (var disposable in disposables) { await disposable.DisposeAsync(); } await _connectionPool.DisposeAsync(); }