public QueueConfiguration Create() { var readyItems = _persistenceStore.LoadBy(JobStatus.Ready).ToArray(); var runningItems = _persistenceStore.LoadBy(JobStatus.Running).ToArray(); var failedItems = _persistenceStore.LoadBy(JobStatus.Failed).ToArray(); var waitingForChildren = _persistenceStore.LoadBy(JobStatus.WaitingForChildren).ToArray(); var partiallyCompletedItems = _persistenceStore.LoadBy(JobStatus.ReadyToComplete) .Concat(_persistenceStore.LoadBy(JobStatus.ReadyToPoison)).ToArray(); var all = partiallyCompletedItems.Concat(readyItems) .Concat(failedItems) .Concat(waitingForChildren) .Concat(runningItems) .ToArray(); var totalSuspendedItemsInSpecificQueues = 0; var activitySpecificQueues = new Dictionary <Type, IJobQueue>(); foreach (var activityConfiguration in _configuration.ActivityConfiguration) { var suspendedCount = _persistenceStore.CountSuspended(activityConfiguration.Type); var filtered = Filter(all, activityConfiguration.Type); all = filtered.Item2; totalSuspendedItemsInSpecificQueues += suspendedCount; activitySpecificQueues[activityConfiguration.Type] = new JobQueue(filtered.Item1, suspendedCount, activityConfiguration, _configuration.ActivityConfiguration, _persistenceStore, _eventStream, _recoverableAction, _jobMutator); PublishQueueInitializedEvent(filtered.Item1.Length, suspendedCount, activityConfiguration.Type); } var suspendedCountForDefaultQueue = _persistenceStore.CountSuspended(null) - totalSuspendedItemsInSpecificQueues; var defaultQueue = new JobQueue(all, suspendedCountForDefaultQueue, _configuration.DefaultActivityConfiguration, _configuration.ActivityConfiguration, _persistenceStore, _eventStream, _recoverableAction, _jobMutator); PublishQueueInitializedEvent(all.Length, suspendedCountForDefaultQueue); return(new QueueConfiguration(defaultQueue, activitySpecificQueues)); }