public IDisposable DisposeOnPipelineCompleted(IDisposable target)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }

            var token = new UnsubscribeDisposable(target);

            if (disposables != null)
            {
                disposables.Add(token);
            }
            else
            {
                disposablesThreadsafeQueue.Enqueue(token);
            }
            return(token);
        }
        public IDisposable DisposeOnPipelineCompleted(IDisposable target)
        {
            if (target == null) throw new ArgumentNullException("target");

            var token = new UnsubscribeDisposable(target);
            if (disposables != null)
            {
                disposables.Add(token);
            }
            else
            {
                disposablesThreadsafeQueue.Enqueue(token);
            }
            return token;
        }