public virtual async Task <Store[]> GetByIdsAsync(string[] ids) { var cacheKey = CacheKey.With(GetType(), "GetByIdsAsync", string.Join("-", ids)); return(await PlatformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { var stores = new List <Store>(); using (var repository = RepositoryFactory()) { repository.DisableChangesTracking(); var dbStores = await repository.GetStoresByIdsAsync(ids); foreach (var dbStore in dbStores) { var store = AbstractTypeFactory <Store> .TryCreateInstance(); dbStore.ToModel(store); PopulateStore(store, dbStore); await SettingManager.DeepLoadSettingsAsync(store); stores.Add(store); cacheEntry.AddExpirationToken(StoreCacheRegion.CreateChangeToken(store)); } } var result = stores.ToArray(); var taskLoadDynamicPropertyValues = DynamicPropertyService.LoadDynamicPropertyValuesAsync(result); var taskLoadSeoForObjects = SeoService.LoadSeoForObjectsAsync(result); await Task.WhenAll(taskLoadDynamicPropertyValues, taskLoadSeoForObjects); return result; })); }