Example #1
0
 void Terminate(IDisposable connection)
 {
     lock (this)
     {
         if (this.connection == connection)
         {
             this.connection = new SequentialDisposable();
             state           = 0;
             this.connected  = false;
             source.Reset();
         }
     }
 }
Example #2
0
            public void OnSubscribe(ISubscription subscription)
            {
                if (SubscriptionHelper.Validate(ref upstream, subscription))
                {
                    SequentialDisposable sd = new SequentialDisposable();
                    timer = sd;

                    ArbiterSet(subscription);

                    actual.OnSubscribe(this);

                    sd.Set(worker.Schedule(() => Timeout(0), firstTimeout));
                }
            }
        internal IDisposable Schedule(Action action, TimeSpan initialDelay, TimeSpan period)
        {
            if (Volatile.Read(ref shutdown))
            {
                return(EmptyDisposable.Instance);
            }

            SequentialDisposable inner = new SequentialDisposable();
            SequentialDisposable outer = new SequentialDisposable(inner);

            long due = SchedulerHelper.NowUTC() + (long)initialDelay.TotalMilliseconds;
            long id  = Interlocked.Increment(ref index);

            long[] count = { 0 };

            Action recursive = null;

            recursive = () =>
            {
                action();
                var duePeriod = due + (long)(++count[0] * period.TotalMilliseconds);
                var idPeriod  = Interlocked.Increment(ref index);
                var periodTT  = new TimedTask(recursive, duePeriod, idPeriod, queue);
                if (Offer(periodTT))
                {
                    outer.Replace(periodTT);
                }
            };

            var tt = new TimedTask(recursive, due, id, queue);

            if (Offer(tt))
            {
                inner.Replace(tt);
                return(outer);
            }

            return(EmptyDisposable.Instance);
        }
Example #4
0
 void Remove(IDisposable connection)
 {
     lock (this)
     {
         if (this.connection == connection)
         {
             if (--state == 0)
             {
                 this.connection = new SequentialDisposable();
                 this.connected  = false;
                 connection.Dispose();
                 source.Reset();
             }
             else
             {
                 return;
             }
         }
         else
         {
             return;
         }
     }
 }
Example #5
0
 internal FlowableRefCount(IConnectableFlowable <T> source, int count)
 {
     this.source     = source;
     this.count      = count;
     this.connection = new SequentialDisposable();
 }