protected virtual void Dispose(bool disposing)
        {
            IoCompletionPort completionPort = Interlocked.Exchange(ref _ioCompletionPort, null);

            if (completionPort != null)
            {
                lock (_completionPortLock)
                    ReleaseIoCompletionPort();
            }
        }
        private static IoCompletionPort AcquireIoCompletionPort()
        {
            System.Diagnostics.Debug.Assert(Monitor.IsEntered(_completionPortLock));

            if (_completionPortCount == 0)
            {
                _completionPort = new IoCompletionPort();
            }

            _completionPortCount++;
            return(_completionPort);
        }
        private static void ReleaseIoCompletionPort()
        {
            System.Diagnostics.Debug.Assert(Monitor.IsEntered(_completionPortLock));
            System.Diagnostics.Debug.Assert(_completionPortCount > 0);

            if (_completionPortCount == 1)
            {
                _completionPort.Dispose();
                _completionPort = null;
            }

            _completionPortCount--;
        }