private LinkedListNode <OrderBook> PrepareNextNode()
        {
            LinkedListNode <OrderBook> nextNode;
            int?periodSynchronizationToken;

            lock (_locker)
            {
                nextNode = _currentNode != null ? _currentNode.Next : _history.First;
                periodSynchronizationToken = _lastPeriodSynchronizationToken;
            }

            if (nextNode == null)
            {
                if (!_loader.LoadData(periodSynchronizationToken))
                {
                    _hasNoMoreData = true;
                    return(null);
                }
            }

            lock (_locker)
            {
                return(_currentNode != null ? _currentNode.Next : _history.First);
            }
        }
Exemple #2
0
        /// <summary>
        /// Removes next order book entry from history and returns it.
        /// </summary>
        /// <returns>Next order book entry from history.</returns>
        public OrderBook GetNext()
        {
            int historyCount;
            int?periodSynchronizationToken;

            lock (_locker)
            {
                historyCount = _history.Count;
                periodSynchronizationToken = _lastPeriodSynchronizationToken;
            }

            if (historyCount == 0)
            {
                if (!_loader.LoadData(periodSynchronizationToken))
                {
                    return(null);
                }
            }

            lock (_locker)
            {
                var next = _history.First;
                _history.RemoveFirst();
                return(next.Value);
            }
        }