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); } }
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); } }
public void Request(long n) { SubscriptionHelper.DeferredRequest(ref upstream, ref requested, n); }
internal void Request() { SubscriptionHelper.DeferredRequest(ref upstream, ref requested, 1); }