public void Update(long newTailIndex) { QueueState oldState; QueueState newState; do { oldState = _currentState; newState = new QueueState(newTailIndex); } while (Interlocked.CompareExchange(ref _currentState, newState, oldState) != oldState); oldState?.Update(newState); }
private QueueStateMonitor(long initialTailIndex) { _currentState = new QueueState(initialTailIndex); }