public void Run() { _running = true; while (_running) { long value; if (!_blockingQueue.TryDequeue(out value)) { continue; } _sequence++; _value += value; for (var i = 0; i < 100; i++) { long item; if (!_blockingQueue.TryDequeue(out item)) { break; } _batch.Add(item); } _sequence += _batch.Count; value = 0; for (int i = 0, n = _batch.Count; i < n; i++) { value += _batch[i]; } _value += value; _batch.Clear(); if (_sequence == _count) { _latch.Set(); } } }
public void Run() { _running = true; while (_running) { //long value; //while (!_blockingQueue.TryDequeue(out value)) // break; long value; while (!_blockingQueue.TryDequeue(out value)) { break; } _value += value; if (_sequence++ == _count) { _latch.Set(); } } }