public void OnSubscribe(IDisposable d)
        {
            if (DisposableHelper.SetOnce(ref upstream, d))
            {
                if (d is IFuseableDisposable <T> fd)
                {
                    var m = fd.RequestFusion(FusionSupport.AnyBoundary);

                    if (m == FusionSupport.Sync)
                    {
                        fusionMode = m;
                        Volatile.Write(ref queue, fd);
                        SetDone();
                        parent.Drain();
                        return;
                    }

                    if (m == FusionSupport.Async)
                    {
                        fusionMode = m;
                        Volatile.Write(ref queue, fd);
                    }
                }
            }
        }
 public override void OnSubscribe(IDisposable d)
 {
     if (DisposableHelper.SetOnce(ref upstream, d))
     {
         observer.OnSubscribe(this);
     }
 }
 public void OnSubscribe(IDisposable d)
 {
     if (DisposableHelper.SetOnce(ref upstream, d))
     {
         if (next != null)
         {
             downstream.OnSubscribe(this);
         }
     }
 }
Exemple #4
0
 public void OnSubscribe(IDisposable d)
 {
     DisposableHelper.SetOnce(ref upstream, d);
     try
     {
         onSubscribe?.Invoke(this);
     }
     catch (Exception ex)
     {
         d.Dispose();
         OnError(ex);
     }
 }
Exemple #5
0
        public IDisposable Subscribe(IObserver <T> observer)
        {
            var ccd = new CacheConsumerDisposable(observer, this, head);

            Add(ccd);
            if (Volatile.Read(ref once) == 0 && Interlocked.CompareExchange(ref once, 1, 0) == 0)
            {
                var d = source.Subscribe(this);
                DisposableHelper.SetOnce(ref upstream, d);
                cancel?.Invoke(this);
            }
            Drain(ccd);
            return(ccd);
        }
 internal void OnSubscribe(IDisposable d)
 {
     DisposableHelper.SetOnce(ref upstream, d);
 }
 public override void OnSubscribe(IDisposable d)
 {
     DisposableHelper.SetOnce(ref upstream, d);
 }
 internal void SetConnection(IDisposable d)
 {
     DisposableHelper.SetOnce(ref connection, d);
 }