public IList <QueueWithTopEnqueuedJobsDto> Queues() { return(UseConnection <IList <QueueWithTopEnqueuedJobsDto> >(connection => { var tuples = _queueProviders .Select(x => x.GetJobQueueMonitoringApi(connection)) .SelectMany(x => x.GetQueues(), (monitoring, queue) => new { Monitoring = monitoring, Queue = queue }) .OrderBy(x => x.Queue) .ToArray(); var result = new List <QueueWithTopEnqueuedJobsDto>(tuples.Length); foreach (var tuple in tuples) { var enqueuedJobIds = tuple.Monitoring.GetEnqueuedJobIds(tuple.Queue, 0, 5); var counters = tuple.Monitoring.GetEnqueuedAndFetchedCount(tuple.Queue); result.Add(new QueueWithTopEnqueuedJobsDto { Name = tuple.Queue, Length = counters.EnqueuedCount ?? 0, Fetched = counters.FetchedCount, FirstJobs = EnqueuedJobs(connection, enqueuedJobIds) }); } return result; })); }