Пример #1
0
        public void Subscribe(ISubscriber <T> s)
        {
            PublisherCacheInner inner = new PublisherCacheInner(s, this, capacityHint, head);

            Add(inner);

            if (inner.IsCancelled())
            {
                Remove(inner);
                return;
            }

            inner.Drain();

            if (Volatile.Read(ref once) == 0 && Interlocked.CompareExchange(ref once, 1, 0) == 0)
            {
                source.Subscribe(this);
            }
        }
Пример #2
0
 void Remove(PublisherCacheInner inner)
 {
     ProcessorHelper.Remove(ref subscribers, inner, Terminated, Empty);
 }
Пример #3
0
 bool Add(PublisherCacheInner inner)
 {
     return(ProcessorHelper.Add(ref subscribers, inner, Terminated));
 }