Esempio n. 1
0
            // private methods
            private IConnectionHandle AcquireOrCreateConnection()
            {
                PooledConnection connection = _pool._connectionHolder.Acquire();

                if (connection == null)
                {
                    var addingConnectionEventHandler = _pool._addingConnectionEventHandler;
                    if (addingConnectionEventHandler != null)
                    {
                        addingConnectionEventHandler(new ConnectionPoolAddingConnectionEvent(_pool._serverId, EventContext.OperationId));
                    }

                    var stopwatch = Stopwatch.StartNew();
                    connection = _pool.CreateNewConnection();
                    stopwatch.Stop();

                    var addedConnectionEventHandler = _pool._addedConnectionEventHandler;
                    if (addedConnectionEventHandler != null)
                    {
                        addedConnectionEventHandler(new ConnectionPoolAddedConnectionEvent(connection.ConnectionId, stopwatch.Elapsed, EventContext.OperationId));
                    }
                }

                var reference = new ReferenceCounted <PooledConnection>(connection, _pool.ReleaseConnection);

                return(new AcquiredConnection(_pool, reference));
            }
            private void StartCreating(CancellationToken cancellationToken)
            {
                var addingConnectionEvent = new ConnectionPoolAddingConnectionEvent(_pool._serverId, EventContext.OperationId);

                _pool._addingConnectionEventHandler?.Invoke(addingConnectionEvent);

                cancellationToken.ThrowIfCancellationRequested();

                _stopwatch  = Stopwatch.StartNew();
                _connection = _pool.CreateNewConnection();
            }