System.Threading.CancellationRegion.Dispose C# (CSharp) Method

Dispose() private method

private Dispose ( ) : void
return void
        public void Dispose()
        {
            if (_signal == null)
                return;

            BCLDebug.Assert(Thread.CurrentThread == _signal.Thread, "You called Dispose on the wrong thread, or reused your cancellation signal?");
            List<CancellationSignal> signals = _signal.Thread.CancellationSignals;

            bool tookLock = false;
            RuntimeHelpers.PrepareConstrainedRegions();
            try {
                Monitor.ReliableEnter(signals, out tookLock);
                CancellationSignal s = signals[signals.Count - 1];
                signals.RemoveAt(signals.Count - 1);
                if (!Object.ReferenceEquals(s, _signal))
                    throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CancellationRegionLeak"));
                _signal.Thread = null;
                _signal = null;
            }
            finally {
                if (tookLock)
                    Monitor.Exit(signals);
                Thread.EndThreadAffinity();
            }
        }