public async Task <ProductsPageViewModel> FindProductsAsync(string sku, int pageIndex, int pageSize) { pageSize = pageSize == 0 ? _settings.DefaultPageSize : pageSize; PaginatedList <Product> products = await PaginatedList <Product> .FromIQueryable(_productsRepository.FindProductsAsync(sku), pageIndex, pageSize); if (products.Count() == 1) { //only one record found Product product = products.Single(); string productId = product.ProductId.ToString(); //cache a product if not in cache yet if (!await _productCacheRepository.IsValueCachedAsync(productId)) { await _productCacheRepository.SetValueAsync(productId, product); } //prepare prices if (!await _pricesCacheRepository.IsValueCachedAsync(productId)) { //prepare prices beforehand ThreadPool.QueueUserWorkItem(delegate { CallPreparePricesApiAsync(productId); }); } } ; return(new ProductsPageViewModel(products)); }