protected virtual void ProfileRetry(Guid profileId, int retryStart, ResourceRetryReason reason)
        {
            if (mResourceConsumer == null)
            {
                return;
            }

            mResourceConsumer.Retry(profileId, retryStart, reason);
        }
        /// <summary>
        /// This method is used to keep incoming threads cycling while the first thread retrieves the entity from
        /// the persistence store.
        /// </summary>
        /// <param name="cacheHolder">The current cache holder.</param>
        /// <param name="traceId">The resource traceid</param>
        /// <param name="status">The final status.</param>
        /// <returns></returns>
        private void Gatekeeper(EntityCacheHolder <K, E> cacheHolder, Guid traceId, out ResourceRequestResult status, int attempts = 5)
        {
            int retryStart = Environment.TickCount;

            while (cacheHolder.State != EntityCacheHolderState.Completed && --attempts > 0)
            {
                cacheHolder.Wait();
                mResourceConsumer.Retry(traceId, retryStart, ResourceRetryReason.Timeout);
                retryStart = Environment.TickCount;
            }

            if (cacheHolder.State == EntityCacheHolderState.Completed)
            {
                status = ResourceRequestResult.Success;
            }
            else if (attempts <= 0)
            {
                status = ResourceRequestResult.RetryExceeded;
            }
            else
            {
                status = ResourceRequestResult.TaskCancelled;
            }
        }
示例#3
0
 /// <summary>
 /// This method is called if a session request needs to be retried.
 /// </summary>
 /// <param name="profileId">The trace id.</param>
 /// <param name="retryStart">The retry tick count.</param>
 /// <param name="reason">The retry reason.</param>
 protected void ProfileRetry(Guid profileId, int retryStart, ResourceRetryReason reason)
 {
     mResourceConsumer?.Retry(profileId, retryStart, reason);
 }