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); } } }
public void OnSubscribe(IDisposable d) { DisposableHelper.SetOnce(ref upstream, d); try { onSubscribe?.Invoke(this); } catch (Exception ex) { d.Dispose(); OnError(ex); } }
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); }