public PipePoint Subscribe(int?bufferSize = null, CancellationToken cancelForNewPipe = default)
        {
            bufferSize = Math.Max(bufferSize ?? this.BufferSize, 1);

            PipePoint mySide = PipePoint.NewDuplexPipeAndGetOneSide(PipePointSide.A_LowerSide, cancelForNewPipe, bufferSize.Value);

            mySide.CounterPart._MarkNotNull();

            mySide.AddOnDisconnected(() => Unsubscribe(mySide.CounterPart));

            lock (this.MasterBuffer.LockObj)
            {
                ReadOnlySpan <ReadOnlyMemory <byte> > currentAllData = this.MasterBuffer.GetAllFast();

                lock (mySide.StreamWriter.LockObj)
                {
                    mySide.StreamWriter.NonStopWriteWithLock(currentAllData, true, FastStreamNonStopWriteMode.DiscardExistingData);
                }
            }

            lock (LockObj)
            {
                this.SubscribersList.Add(mySide.CounterPart);
            }

            return(mySide.CounterPart);
        }