/// <summary>
        /// Sends event forever until stopped.
        /// </summary>
        private void loop()
        {
            for (;;)
            {
                var run = false;
                lock (_startStopLock)
                {
                    run = _keepRunning;
                }

                if (run)
                {
                    // If device is offline wait and loop
                    if (_deviceOnlineMethod != null && !_deviceOnlineMethod.Invoke())
                    {
                        EmitterLoopBackoff();
                    }
                    else
                    {
                        var eventList = _queue.Peek(_sendLimit, _stopPollIntervalMs);
                        _logger.Info(String.Format("Emitter found {0} events", eventList.Count));

                        var sendResult = _endpoint.Send(eventList);
                        _queue.Remove(sendResult.SuccessIds);
                        var successCount = sendResult.SuccessIds.Count;
                        var failureCount = sendResult.FailureIds.Count;

                        _logger.Info(String.Format("Emitter sent and deleted {0} events", successCount));
                        _logger.Info(String.Format("Emitter failed to send {0}", failureCount));

                        // Send callback method
                        _sendSuccessMethod?.Invoke(successCount, failureCount);

                        // If all events failed to send slow down - back off 30 secs
                        // NB this can be interrupted by Flush
                        if (successCount == 0 && failureCount > 0)
                        {
                            EmitterLoopBackoff();
                        }
                    }
                }
                else
                {
                    _logger.Info("Emitter thread finished processing");
                    break;
                }
            }
        }
            public void Consume()
            {
                Consumed = new List <Payload>();

                for (int i = 0; i < _count; i++)
                {
                    var items = _q.Peek(1, _timeout);
                    foreach (var item in items)
                    {
                        Consumed.Add(item.Item2);
                    }
                }
            }