コード例 #1
0
ファイル: WithRetryAsync.cs プロジェクト: matiii/solidry
        /// <summary>
        /// Invoke logic with retry.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        protected async Task <TOutput> InvokeAsync(TInput input)
        {
            OperationId = Guid.NewGuid();
            int attempt          = 0;
            int delayMiliseconds = _delayMiliseconds;

            while (true)
            {
                attempt++;

                try
                {
                    return(await ExecuteAsync(input).ConfigureAwait(false));
                }
                catch (Exception e)
                {
                    if (!_retryStrategy.Retry(OperationId, e, attempt, delayMiliseconds, x => { delayMiliseconds = x; }))
                    {
                        throw;
                    }
                }

                await Task.Delay(delayMiliseconds).ConfigureAwait(false);
            }
        }
コード例 #2
0
        /// <summary>
        /// Invoke logic with retry.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        protected TOutput Invoke(TInput input)
        {
            OperationId = Guid.NewGuid();
            int attempt          = 0;
            int delayMiliseconds = _delayMiliseconds;

            while (true)
            {
                attempt++;

                try
                {
                    return(Execute(input));
                }
                catch (Exception e)
                {
                    if (!_retryStrategy.Retry(OperationId, e, attempt, delayMiliseconds, x => { delayMiliseconds = x; }))
                    {
                        throw;
                    }
                }

                SpinWait.SpinUntil(() => false, delayMiliseconds);
            }
        }
コード例 #3
0
        /// <summary>
        /// Invoke logic with retry.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        protected new TOutput Invoke(TInput input)
        {
            int attempt          = 0;
            int delayMiliseconds = _delayMiliseconds;

            while (true)
            {
                attempt++;

                try
                {
                    return(base.Invoke(input));
                }
                catch (Exception e)
                {
                    if (!_retryStrategy.Retry(CurrentOperationId, e, attempt, delayMiliseconds, x => { delayMiliseconds = x; }))
                    {
                        throw;
                    }
                }

                SpinWait.SpinUntil(() => false, delayMiliseconds);
            }
        }