public override void Run() { Trace.TraceInformation("MSGorilla.MailDispatcher entry point called"); _mailboxCache = new MemoryCache("mailbox"); _mailStoreCache = new MemoryCache("mailstore"); _groupID2Name = new Dictionary <string, string>(); _topicManager = new TopicManager(); _groupManager = new GroupManager(); _accountManager = new AccountManager(); _richMsgManager = new RichMsgManager(); CloudQueue _queue = AzureFactory.GetQueue(AzureFactory.MSGorillaQueue.MailMessage);; while (true) { try { CloudQueueMessage message = _queue.GetMessage(); while (message == null) { Thread.Sleep(1000); message = _queue.GetMessage(); } _queue.UpdateMessage(message, TimeSpan.FromSeconds(60.0 * 1), // Make it in five minutes MessageUpdateFields.Visibility); Message msg = JsonConvert.DeserializeObject <Message>(message.AsString); DispatchMail(msg); _queue.DeleteMessage(message); } catch (Exception e) { Trace.TraceError("Exception in worker role", e.StackTrace); } } }