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());
}