public void Add(object item) { List <object> buf; lock (_buffer) { _buffer.Add(item); buf = _buffer; if (_buffer.Count == _maxObjectsCount) { Task.Run(() => _onFlush(buf)); _buffer.Clear(); } } OnObjectCountChange?.Invoke(this, _buffer.Count); }
private void TimerWork(object state) { while (_timerOn && !_disposed) { Thread.Sleep(_timeSpan); List <object> buf; lock (_buffer) { buf = _buffer; Task.Run(() => _onFlush(buf)); _buffer.Clear(); } if (!_disposed) { OnObjectCountChange?.Invoke(this, _buffer.Count); } } }