public IDisposable Schedule(Action task) { if (Volatile.Read(ref disposed) == 0) { InterruptibleAction ia = new InterruptibleAction(task); ia.parent = this; if (AddAction(ia)) { var d = shared.Schedule(ia.Run); DisposableHelper.Replace(ref ia.resource, d); return(ia); } } return(EmptyDisposable.Instance); }
internal void Schedule() { if (Interlocked.Increment(ref wip) == 1) { worker.Schedule(run); } }
public override void Subscribe(IFlowableSubscriber <T> subscriber) { IExecutorWorker worker = executor.Worker; var s = new SubscribeOnSubscriber(subscriber, worker, requestOn, source); subscriber.OnSubscribe(s); worker.Schedule(s.Run); }
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); } }
public void OnComplete() { worker.Schedule(Terminate, delay); }