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); } }
/// <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); } }