public void Run()
            {
                _globalSignal.Signal();
                _globalSignal.Wait();

                while (!_cancellationToken.IsCancellationRequested)
                {
                    long value;
                    if (_pingQueue.TryDequeue(out value))
                    {
                        _pongQueue.Enqueue(value);
                    }
                    else
                    {
                        Thread.Yield();
                    }
                }
            }
    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();
            }
        }
    }