private async Task ProcessConnectionAsync(object state)
        {
            var transportConnection = (ITransportConnection)state;

            Log.Debug("Accepting new incoming connection {0}", transportConnection.Id);
            var appConnectionDescriptor =
                await _authenticationHandler.AuthenticateAsync(transportConnection).ConfigureAwait(false);

            Log.Debug("New connection authenticated: {0}", appConnectionDescriptor);
            var clientConnection = _appLifecycleManager.AcceptConnection(transportConnection, appConnectionDescriptor);

            try
            {
                Log.Info("New connection accepted: {0}", clientConnection);
                var clientConnectionProcessor = new AppConnectionProcessor(clientConnection, _clientRequestHandler);
                await clientConnectionProcessor.Completion.ConfigureAwait(false);
            }
            finally
            {
                _appLifecycleManager.RemoveConnection(clientConnection);
            }
        }