public void OnSubscribe(ISubscription subscription)
 {
     if (Interlocked.CompareExchange(ref hasSubscribed, 1, 0) == 0)
     {
         actual.OnSubscribe(this);
         SubscriptionHelper.DeferredSetOnce(ref upstream, ref requested, subscription);
     }
     else
     {
         subscription.Cancel();
     }
 }
Ejemplo n.º 2
0
 public void OnSubscribe(ISubscription subscription)
 {
     if (requestOn)
     {
         if (SubscriptionHelper.SetOnce(ref upstream, subscription))
         {
             long r = Interlocked.Exchange(ref requested, 0L);
             if (r != 0L)
             {
                 worker.Schedule(() => upstream.Request(r));
             }
         }
     }
     else
     {
         SubscriptionHelper.DeferredSetOnce(ref upstream, ref requested, subscription);
     }
 }
Ejemplo n.º 3
0
 public void OnSubscribe(ISubscription subscription)
 {
     SubscriptionHelper.DeferredSetOnce(ref upstream, ref requested, subscription);
 }
 internal void MainSubscribe(ISubscription subscription)
 {
     SubscriptionHelper.DeferredSetOnce(ref mainUpstream, ref requested, subscription);
 }