public override async void PollQueue() { CloudStorageAccount account = QueueAccount; var queue = new MessageQueue <TMessage>(account); var queueRemover = GetQueueRemover(queue); IPoolingFrequencer frequencer = Frequencer; bool useDefaultTimeout = !Consumer.EstimatedTimeToProcessMessageBlock.HasValue; TimeSpan defaultTimeout = useDefaultTimeout ? TimeSpan.FromSeconds(30) : Consumer.EstimatedTimeToProcessMessageBlock.Value; while (true) { try { var messages = useDefaultTimeout ? await queue.Dequeue(Consumer.BlockSize) : await queue.Dequeue(Consumer.BlockSize, defaultTimeout); var queueMessages = messages.ToList(); if (queueMessages.Any()) { try { Consumer.ProcessMessagesGroup(queueRemover, queueMessages); } catch (Exception e) { OnProcessMessageLogException(queueMessages, e); } finally { frequencer.Decrease(); } } else { Thread.Sleep(frequencer.Current); } } catch (Exception e) { OnDequeueLogException(e); Thread.Sleep(5 * 1000); } } }
public IQueueConsumer With(IPoolingFrequencer theFrequencer) { _frequencer = theFrequencer ?? throw new ArgumentNullException(nameof(theFrequencer)); return(this); }