protected virtual Guid ProfileStart(string id, string directory) { if (mResourceConsumer == null) { return(Guid.NewGuid()); } return(mResourceConsumer.Start(string.Format("{0}/{1}", directory, id), Guid.NewGuid())); }
/// <summary> /// This method starts the profile session and returns the profile trace id. /// </summary> /// <param name="id">The trace id.</param> /// <returns>Returns a profile Guid.</returns> protected Guid ProfileStart(string id) { return(mResourceConsumer?.Start(id, Guid.NewGuid()) ?? Guid.NewGuid()); }
/// <summary> /// This method retrieves the cache holder from the store. If the cache holder is not present then it /// tries to retrieve it from the underlying store. /// </summary> /// <param name="key">The key to retrieve.</param> /// <returns>The cache holder.</returns> protected async Task <EntityCacheHolder <K, E> > TryGetCacheHolder(K key) { var traceId = mResourceConsumer.Start("TryGetCacheHolder", Guid.NewGuid()); ResourceRequestResult status = ResourceRequestResult.Unknown; EntityCacheHolder <K, E> cacheHolder; int start = StatisticsInternal.ActiveIncrement(); try { while (true) { int retryStart = Environment.TickCount; //Get the cache holder, and if it already exists, see if you need to wait. if (!mEntities.TryGetValue(key, out cacheHolder)) { var temp = new EntityCacheHolder <K, E>(key, Policy.EntityDefaultTTL); if (mEntities.TryAdd(key, temp)) { //Ok, the entity is not in the cache, so let's go and get the entity. cacheHolder = temp; break; } } else { Gatekeeper(cacheHolder, traceId, out status); return(cacheHolder); } mResourceConsumer.Retry(traceId, retryStart, ResourceRetryReason.Timeout); } try { //Ok, read the entity var result = await Read(key); if (result != null && !result.IsFaulted && (result.ResponseCode == 200 || result.ResponseCode == 404)) { cacheHolder.Load(result.Entity, result.ResponseCode); status = ResourceRequestResult.Success; } else { cacheHolder.Cancel(); status = ResourceRequestResult.TaskCancelled; } } catch (Exception ex) { cacheHolder.Cancel(); status = ResourceRequestResult.TaskCancelled; Collector?.LogException(string.Format("Error requesting {0} - {1} ", typeof(E).Name, key.ToString()), ex); } finally { if (cacheHolder.State == EntityCacheHolderState.Cancelled) { mEntities.TryRemove(key, out cacheHolder); } //Make sure that any waiting requests are released. cacheHolder.Release(); } } finally { StatisticsInternal.ActiveDecrement(start); if (status != ResourceRequestResult.Success) { StatisticsInternal.ErrorIncrement(); } mResourceConsumer.End(traceId, start, status); } return(cacheHolder); }