예제 #1
0
        private void ShutdownTimeoutHandler(object state)
        {
            LinkedListNode <ShutdownAsyncRequest <Response> > listNode = (LinkedListNode <ShutdownAsyncRequest <Response> >)state;
            ShutdownAsyncRequest <Response> shutdownAsyncRequest       = listNode.Value;

            if (shutdownAsyncRequest != null && shutdownAsyncRequest.TryLock())
            {
                lock (@lock) {
                    if (listNode.List != null)
                    {
                        request = null;
                    }
                }

                shutdownAsyncRequest.Dispose();
                shutdownAsyncRequest.SetResult(_httpHelper.ServerShutdownTimeout);
            }
        }
예제 #2
0
        public Task <Response> AwaitShutdown(CancellationTokenSource cancellationToken, int timeout)
        {
            lock (@lock) {
                cancellationToken.Cancel();

                if (timeout == 0)
                {
                    return(Task.FromResult(_httpHelper.ServerShutdownTimeout));
                }

                request = new ShutdownAsyncRequest <Response>();
                var listNode = new LinkedListNode <ShutdownAsyncRequest <Response> >(request);

                if (timeout != Timeout.Infinite)
                {
                    request.Timer = new Timer(shutdownTimeoutHandler, listNode, timeout, Timeout.Infinite);
                }

                return(request.Task);
            }
        }