// methods
        public async Task <IConnectionHandle> AcquireConnectionAsync(TimeSpan timeout, CancellationToken cancellationToken)
        {
            ThrowIfDisposed();
            PooledConnection connection;

            lock (_lock)
            {
                connection = ChooseAvailableConnection();
                if (connection == null)
                {
                    connection = CreateConnection();
                }
            }

            await connection.OpenAsync(timeout, cancellationToken);

            var acquiredConnection         = new AcquiredConnection(connection);
            var referenceCountedConnection = new ReferenceCountedConnection(acquiredConnection);

            return(new ConnectionHandle(referenceCountedConnection));
        }
 // constructors
 public ConnectionHandle(ReferenceCountedConnection wrapped)
     : base(wrapped)
 {
     _wrapped = wrapped;
 }
 // constructors
 public ConnectionHandle(ReferenceCountedConnection wrapped)
     : base(wrapped)
 {
     _wrapped = wrapped;
 }