Beispiel #1
0
        public IDisposable AddRepeatableActionInTicks(Action <IDisposable> action, ulong period)
        {
            var tmp = new TickTimerCancelToken(period, action, this, period);

            _toAdd.Enqueue(tmp);
            return(tmp);
        }
Beispiel #2
0
        public IDisposable AddDelayedActionInTicks(Action <IDisposable> action, ulong delay)
        {
            var tmp = new TickTimerCancelToken(delay, action, this, 0);

            _toAdd.Enqueue(tmp);
            return(tmp);
        }
Beispiel #3
0
 void CancelAction(TickTimerCancelToken token)
 {
     if (token.Timer != this)
     {
         return;
     }
     _toRemove.Enqueue(token);
 }
Beispiel #4
0
        void AddAction(TickTimerCancelToken token)
        {
            HashSet <TickTimerCancelToken> actions;

            if (!_delays.TryGetValue(tick + token.Timeout, out actions))
            {
                _delays[tick + token.Timeout] = actions = new HashSet <TickTimerCancelToken>(EqualityComparer <TickTimerCancelToken> .Default);
            }
            actions.Add(token);
        }
Beispiel #5
0
        void RemoveAction(TickTimerCancelToken token)
        {
            HashSet <TickTimerCancelToken> actions;

            if (_delays.TryGetValue(token.Timeout, out actions))
            {
                if (actions.Remove(token))
                {
                    if (actions.Count == 0)
                    {
                        _delays.Remove(token.Timeout);
                    }
                    ActionRemoved?.Invoke();
                }
            }
        }