static async Task<Tuple<EventData, string>[]> CollectEventHubMessagesAsync(EventHubReceiver[] receivers, int messagesPending) { List<Task<EventData>> receiveTasks = receivers.Select(r => r.ReceiveAsync(TimeSpan.FromMinutes(20))).ToList(); var ehMessages = new Tuple<EventData, string>[messagesPending]; while (true) { Task<EventData> receivedTask = await Task.WhenAny(receiveTasks); EventData eventData = receivedTask.Result; if (eventData != null) { ehMessages[messagesPending - 1] = Tuple.Create(eventData, Encoding.UTF8.GetString(eventData.GetBytes())); if (--messagesPending == 0) { break; } } int receivedIndex = receiveTasks.IndexOf(receivedTask); receiveTasks[receivedIndex] = receivers[receivedIndex].ReceiveAsync(TimeSpan.FromMinutes(20)); } return ehMessages; }