private static async Task <List <Lookup> > GetLookups(ProductDefinition productDef, IOvertureClient client) { var kvaLookupAttributes = productDef.VariantProperties.Where(vp => vp.IsKeyVariant && vp.DataType == PropertyDataType.Lookup) .Select(vp => vp.LookupDefinition.LookupName); var results = new List <Lookup>(); var lookupTasks = new List <Task <Lookup> >(); foreach (var name in kvaLookupAttributes.Distinct()) { var request = new GetProductLookupRequest { LookupName = name }; lookupTasks.Add(client.SendAsync(request)); } var lookupResults = await Task.WhenAll(lookupTasks).ConfigureAwait(false); foreach (var lookup in lookupResults) { if (lookup != null) { results.Add(lookup); } } return(results); }
private static async Task <List <Lookup> > GetLookups(ProductDefinition productDef, IOvertureClient client) { var kvaLookupAttributes = productDef.VariantProperties .Where(vp => vp.IsKeyVariant && vp.DataType == PropertyDataType.Lookup) .Select(vp => vp.LookupDefinition.LookupName); var lookupTasks = new Dictionary <string, Task <Lookup> >(); foreach (var name in kvaLookupAttributes) { if (lookupTasks.ContainsKey(name)) { continue; } var request = new GetProductLookupRequest { LookupName = name }; lookupTasks.Add(name, client.SendAsync(request)); } var lookupResults = await Task.WhenAll(lookupTasks.Values).ConfigureAwait(false); return(lookupResults.Where(x => x != null).ToList()); }
public Task <Lookup> GetLookupAsync(string name) { var cacheKey = new CacheKey(CacheConfigurationCategoryNames.Lookup); cacheKey.AppendKeyParts(name); // the request type uniquely identifies what type of lookup is being searched var request = new GetProductLookupRequest { LookupName = name }; //removed await because there is no logic after return from the call return(_cacheProvider.GetOrAddAsync(cacheKey, () => _overtureClient.SendAsync(request))); }