async Task ProcessContext()
        {
            QueueNextRequestPending();
            HttpListenerContext nativeContext;

            try
            {
                nativeContext = await _listener.GetContextAsync();
            }
            catch (HttpListenerException)
            {
                return;
            }
            var ambientContext = new AmbientContext();
            var context        = new HttpListenerCommunicationContext(this, nativeContext);

            try
            {
                using (new ContextScope(ambientContext))
                {
                    var incomingRequestReceivedEventArgs = new IncomingRequestReceivedEventArgs(context);
                    IncomingRequestReceived(this, incomingRequestReceivedEventArgs);
                    await incomingRequestReceivedEventArgs.RunTask;
                }
            }
            finally
            {
                using (new ContextScope(ambientContext))
                {
                    IncomingRequestProcessed(this, new IncomingRequestProcessedEventArgs(context));
                }
            }
        }
        async Task ProcessContext(HttpListenerContext nativeContext)
        {
            var ambientContext = new AmbientContext();
            var context        = new HttpListenerCommunicationContext(this, nativeContext, Resolver.Resolve <ILogger>());

            try
            {
                Interlocked.Increment(ref _pendingRequestCount);
                _zeroPendingRequests.Reset();

                try
                {
                    using (new ContextScope(ambientContext))
                    {
                        Resolver.AddDependencyInstance(typeof(HttpListenerContext), nativeContext);
                        var incomingRequestReceivedEventArgs = new IncomingRequestReceivedEventArgs(context);
                        IncomingRequestReceived(this, incomingRequestReceivedEventArgs);
                        await incomingRequestReceivedEventArgs.RunTask;
                    }
                }
                finally
                {
                    using (new ContextScope(ambientContext))
                    {
                        IncomingRequestProcessed(this, new IncomingRequestProcessedEventArgs(context));
                    }
                }
            }
            finally
            {
                if (Interlocked.Decrement(ref _pendingRequestCount) == 0)
                {
                    _zeroPendingRequests.Set();
                }

                nativeContext.Response.Close();
            }
        }