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);
        }
Exemplo n.º 2
0
        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)));
        }