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