public virtual async Task <DemoCustomerSegment[]> GetByIdsAsync(string[] ids) { var cacheKey = CacheKey.With(GetType(), nameof(GetByIdsAsync), string.Join("-", ids.OrderBy(x => x))); var result = await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { var rules = Array.Empty <DemoCustomerSegment>(); if (!ids.IsNullOrEmpty()) { using var customerSegmentsRepository = _customerSegmentRepositoryFactory(); //Optimize performance and CPU usage customerSegmentsRepository.DisableChangesTracking(); var entities = await customerSegmentsRepository.GetByIdsAsync(ids); rules = entities .Select(x => x.ToModel(AbstractTypeFactory <DemoCustomerSegment> .TryCreateInstance())) .ToArray(); cacheEntry.AddExpirationToken(DemoCustomerSegmentCacheRegion.CreateChangeToken(ids)); } return(rules); }); return(result); }
protected virtual void ClearCache(IEnumerable <DemoCustomerSegment> customerSegments) { foreach (var customerSegment in customerSegments) { DemoCustomerSegmentCacheRegion.ExpireEntity(customerSegment); } DemoCustomerSegmentSearchCacheRegion.ExpireRegion(); }