Beispiel #1
0
        public async Task <IEnumerable <string> > GetSubscribers(Type eventType, CancellationToken cancellationToken = default)
        {
            var topics = GetTopics(eventType);

            if (topics.Length == 0)
            {
                return(Enumerable.Empty <string>());
            }

            var retrieveTasks = new List <Task <IEnumerable <SubscriptionEntity> > >(topics.Length);
            var addresses     = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            (_, CloudTable table) = storageAddressingSettings.GetSubscriptionTable(eventType);

            foreach (var topic in topics)
            {
                retrieveTasks.Add(Retrieve(topic, table, cancellationToken));
            }

            await Task.WhenAll(retrieveTasks).ConfigureAwait(false);

            foreach (var retrieveTask in retrieveTasks)
            {
                var subscriptionEntities = retrieveTask.GetAwaiter().GetResult();
                foreach (var subscriptionEntity in subscriptionEntities)
                {
                    addresses.Add(subscriptionEntity.Address);
                }
            }
            return(addresses);
        }