protected override void PerformWork(IList<ArraySegment<Message>> items, out int totalCount, out object state)
{
totalCount = 0;
lock (_cursors)
{
// perf sensitive: re-use cursors array to minimize allocations
if ((_cursorsState == null) || (_cursorsState.Length != _cursors.Count))
{
_cursorsState = new ulong[_cursors.Count];
}
for (int i = 0; i < _cursors.Count; i++)
{
MessageStoreResult<Message> storeResult = _cursorTopics[i].Store.GetMessages(_cursors[i].Id, MaxMessages);
_cursorsState[i] = storeResult.FirstMessageId + (ulong)storeResult.Messages.Count;
if (storeResult.Messages.Count > 0)
{
items.Add(storeResult.Messages);
totalCount += storeResult.Messages.Count;
}
}
// Return the state as a list of cursors
state = _cursorsState;
}
}