private IEnumerable <Dictionary <string, object> > RecieveMessages(ServiceBusSettings settings, ServiceBusReceiver reciever, ILogger logger) { int total = 0; int batchSize; while (true) { if (settings.MaxNumberOfMessages - total >= settings.BatchSize) { batchSize = settings.BatchSize; } else { batchSize = settings.MaxNumberOfMessages - total; } var messages = new IServiceBusMessage[0]; if (batchSize <= 0) { break; } var messagesTask = Task.Run(() => { try { return(reciever.ReceiveMessageBatchAsync(batchSize, TimeSpan.FromSeconds(MessageBusWaitTime))); } catch (Exception ex) { logger.Error($"Cannot receive messages. {Environment.NewLine}{ex}"); return(Task.FromResult(new IServiceBusMessage[0])); } }); messages = messagesTask.Result ?? new IServiceBusMessage[0]; total += messages.Length; // no message in queue => let's finish if (messages.Length == 0) { break; } // enumerate messages for (int j = 0; j < messages.Length; j++) { var oneLevelMessage = new Dictionary <string, object>(messages[j].Properties); oneLevelMessage.Add("ID", messages[j].Id); logger.Debug($"Enumerating message with consultant '{messages[j].Id}'."); logger.Debug($"oneLevelMessage: '{string.Join(";", oneLevelMessage)}'."); yield return(oneLevelMessage); } } }