public virtual async Task <CustomerSegment[]> 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 <CustomerSegment>(); 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 <CustomerSegment> .TryCreateInstance())) .ToArray(); cacheEntry.AddExpirationToken(CustomerSegmentCacheRegion.CreateChangeToken(ids)); } return(rules); }); return(result); }
protected virtual void ClearCache(IEnumerable <CustomerSegment> customerSegments) { foreach (var customerSegment in customerSegments) { CustomerSegmentCacheRegion.ExpireEntity(customerSegment); } CustomerSegmentSearchCacheRegion.ExpireRegion(); }