Beispiel #1
0
 public void Request(long n)
 {
     if (n <= 0L)
     {
         throw new ArgumentOutOfRangeException(nameof(n));
     }
     if (requestOn)
     {
         var s = Volatile.Read(ref upstream);
         if (s != null)
         {
             worker.Schedule(() => upstream.Request(n));
         }
         else
         {
             SubscriptionHelper.AddRequest(ref requested, n);
             s = Volatile.Read(ref upstream);
             if (s != null)
             {
                 long r = Interlocked.Exchange(ref requested, 0L);
                 if (r != 0L)
                 {
                     worker.Schedule(() => upstream.Request(r));
                 }
             }
         }
     }
     else
     {
         SubscriptionHelper.DeferredRequest(ref upstream, ref requested, n);
     }
 }
Beispiel #2
0
 internal void RequestOther(long n)
 {
     if (!SubscriptionHelper.PostCompleteSingleRequest(parent.actual, ref requested, ref last, n, ref cancelled))
     {
         SubscriptionHelper.DeferredRequest(ref upstream, ref deferred, n);
     }
 }
 public void Request(long n)
 {
     if (n <= 0L)
     {
         upstream.Cancel();
         OnError(new ArgumentException("§3.9 violated: non-positive request received"));
     }
     else
     {
         SubscriptionHelper.DeferredRequest(ref upstream, ref requested, n);
     }
 }
Beispiel #4
0
 public void Request(long n)
 {
     SubscriptionHelper.DeferredRequest(ref upstream, ref requested, n);
 }
Beispiel #5
0
 internal void Request()
 {
     SubscriptionHelper.DeferredRequest(ref upstream, ref requested, 1);
 }