コード例 #1
0
        public async Task <bool> Disconnect(TimeSpan timeout)
        {
            var connectionStream = await StreamManager.Get(0).ConfigureAwait(false);

            var semaphoreWait     = new SemaphoreSlim(0);
            var cancelTokenSource = new CancellationTokenSource();
            var sentGoAway        = false;

            var sentDelegate = new Http2Stream.FrameSentDelegate(frame => {
                if (frame.Type == FrameType.GoAway)
                {
                    sentGoAway = true;
                    semaphoreWait.Release();
                }
            });

            connectionStream.OnFrameSent += sentDelegate;

            await connection.QueueFrame(new GoAwayFrame()).ConfigureAwait(false);

            if (timeout != Timeout.InfiniteTimeSpan)
            {
                cancelTokenSource.CancelAfter(timeout);
            }

            await semaphoreWait.WaitAsync(cancelTokenSource.Token).ConfigureAwait(false);

            connectionStream.OnFrameSent -= sentDelegate;

            connection.Disconnect();

            return(sentGoAway);
        }
コード例 #2
0
        private bool _Disconnect(TimeSpan?timeout)
        {
            var connectionStream = streamManager.Get(0);

            var semaphoreWait = new Semaphore(0, 100);
            var sentGoAway    = false;

            var sentDelegate = new Http2Stream.FrameSentDelegate(frame => {
                if (frame.Type == FrameType.GoAway)
                {
                    sentGoAway = true;
                    semaphoreWait.Release();
                }
            });

            connectionStream.OnFrameSent += sentDelegate;

            connection.QueueFrame(new GoAwayFrame());

            if (timeout.HasValue)
            {
                semaphoreWait.WaitOne((int)timeout.Value.TotalMilliseconds);
            }
            else
            {
                semaphoreWait.WaitOne();
            }

            connectionStream.OnFrameSent -= sentDelegate;

            connection.Disconnect();

            return(sentGoAway);
        }
コード例 #3
0
ファイル: Http2Client.cs プロジェクト: gitter-badger/HttpTwo
        public async Task<bool> Disconnect (TimeSpan timeout)
        {
            var connectionStream = await streamManager.Get (0);

            var semaphoreWait = new SemaphoreSlim (0);
            var cancelTokenSource = new CancellationTokenSource ();
            var sentGoAway = false;

            var sentDelegate = new Http2Stream.FrameSentDelegate (frame => {
                if (frame.Type == FrameType.GoAway) {
                    sentGoAway = true;
                    semaphoreWait.Release ();
                }
            });

            connectionStream.OnFrameSent += sentDelegate;

            connection.QueueFrame (new GoAwayFrame ());

            if (timeout != Timeout.InfiniteTimeSpan)
                cancelTokenSource.CancelAfter (timeout);
            
            await semaphoreWait.WaitAsync (cancelTokenSource.Token);

            connectionStream.OnFrameSent -= sentDelegate;

            connection.Disconnect ();

            return sentGoAway;
        }