public static async Task PublishRoutesToEmbeddedSocial()

in code/PublishToEmbeddedSocial/Components/PublishRoutes.cs [30:69]


        public static async Task PublishRoutesToEmbeddedSocial(StorageManager diffStorage, StorageManager diffMetadataStorage, StorageManager publishStorage, StorageManager publishMetadataStorage, EmbeddedSocial embeddedSocial, string runId)
        {
            // get all the diff metadata
            IEnumerable<DiffMetadataEntity> diffMetadata = diffMetadataStorage.DiffMetadataStore.Get(runId);

            // if there are no entries, then there is nothing to do
            if (diffMetadata == null || diffMetadata.Count() < 1)
            {
                return;
            }

            // select the route diff metadata entries
            diffMetadata = from entity in diffMetadata
                           where entity.RecordType == RecordType.Route.ToString()
                           select entity;

            // if there are no entries, then there is nothing to do
            if (diffMetadata == null || diffMetadata.Count() < 1)
            {
                return;
            }

            // each entry covers an agency.
            // process routes per agency in parallel.
            // it is ok to execute these in parallel because the operations being done are independent of each other.
            List<Task> tasks = new List<Task>();
            foreach (DiffMetadataEntity diffMetadataEntity in diffMetadata)
            {
                Task task = Task.Run(async () =>
                {
                    string regionId = diffMetadataEntity.RegionId;
                    string agencyId = diffMetadataEntity.AgencyId;
                    IEnumerable<RouteEntity> diffRoutes = await diffStorage.RouteStore.GetAllRoutes(regionId, agencyId);
                    await PublishRoutesToEmbeddedSocial(diffRoutes, regionId, agencyId, publishStorage, publishMetadataStorage, embeddedSocial, runId);
                });
                tasks.Add(task);
            }

            await Task.WhenAll(tasks.ToArray());
        }