public IDisposable AddRepeatableActionInTicks(Action <IDisposable> action, ulong period) { var tmp = new TickTimerCancelToken(period, action, this, period); _toAdd.Enqueue(tmp); return(tmp); }
public IDisposable AddDelayedActionInTicks(Action <IDisposable> action, ulong delay) { var tmp = new TickTimerCancelToken(delay, action, this, 0); _toAdd.Enqueue(tmp); return(tmp); }
void CancelAction(TickTimerCancelToken token) { if (token.Timer != this) { return; } _toRemove.Enqueue(token); }
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); }
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(); } } }