protected CollectionsTaskLocal _currentTask;                    //used in ExecuteTask and ReportTask

        //Step 0, Timer Loop, Outer Loop, Inner Loop
        void _collectionLoopTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Logger.Log("");
            Logger.Log("");
            Logger.Log("----------Timer Loop ----------");

            PreCollection();

            while ((_collectionCapacity > 0) && _queueContainsMessages)
            {
                //RequestCollectionTasks                    Math.Min(_collectionCapacity, 32)
                List <CollectionsTaskLocal> collectionsTaskList = RequestCollectionTasks(_collectionCapacity);

                if (collectionsTaskList.Count <CollectionsTaskLocal>() > 0)
                {
                    foreach (CollectionsTaskLocal taskIn in collectionsTaskList)
                    {
                        _collectionCapacity--;
                        _currentTask = taskIn;

                        ExecuteCollectionTask();
                        ReportCollectionTask();

                        StorageClientHelper.DeleteQueueMessage(QueueType.Collections, SourceType.Twitter, _currentTask.QueueMessage);
                    }
                }
                else
                {
                    Logger.Log("Received zero messages");
                    _queueContainsMessages = false;
                }
            }

            PostCollection();
        }
        //Step 3, Outer Loop
        private List <CollectionsTaskLocal> RequestCollectionTasks(int collectionCapacity)
        {
            Logger.Log("RequestCollectionTasks");
            //Hard Limit by Azure
            int messageCount = Math.Min(collectionCapacity, 32);

            //Get Q Messages
            IEnumerable <CloudQueueMessage> queueMessages = StorageClientHelper.GetQueueMessages(QueueType.Collections, _sourceType, messageCount);

            //Convert to Tasks
            List <CollectionsTaskLocal> collectionsTaskList = new List <CollectionsTaskLocal>();

            if (queueMessages == null)
            {
                return(collectionsTaskList);
            }
            else
            {
                Logger.Log("Received #" + queueMessages.Count <CloudQueueMessage>().ToString() + " messages");
            }

            foreach (CloudQueueMessage qm in queueMessages)
            {
                string messag             = qm.AsString;
                CollectionsTaskLocal task = CollectionsTaskHelper.MessageToLocalTask(messag);
                task.QueueMessage = qm;
                collectionsTaskList.Add(task);
            }

            return(collectionsTaskList);
        }