コード例 #1
0
        public Task StopAsync()
        {
            if (0 != this._isDisposed)
            {
                return(TplTaskExtensions.CompletedTask);
            }
            this._refreshTimer.Cancel();
            bool   lockTaken = false;
            object obj;
            CancellationTokenSource cancellationTokenSource;
            SignalTask signalTask;

            try
            {
                Monitor.Enter(obj       = this._segmentLock, ref lockTaken);
                this._isRunning         = false;
                cancellationTokenSource = this._abortTokenSource;
                signalTask = this._readTask;
            }
            finally
            {
                if (lockTaken)
                {
                    Monitor.Exit(obj);
                }
            }
            CancellationTokenExtensions.CancelSafe(cancellationTokenSource);
            return(signalTask.WaitAsync());
        }