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();
                }
            }
        }
예제 #2
0
        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();
                }
            }
        }