Microsoft.AspNet.SignalR.Messaging.DefaultSubscription.PerformWork C# (CSharp) Method

PerformWork() private method

private PerformWork ( IList items, int &totalCount, object &state ) : void
items IList
totalCount int
state object
return void
        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;
            }
        }