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);
     }
 }
Example #3
0
        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);
        }
Example #4
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);
     }
 }
 public void OnComplete()
 {
     worker.Schedule(Terminate, delay);
 }