Как включить или отключить Политику Полли во время выполнения? - PullRequest
1 голос
/ 21 апреля 2019

В определении политики я хотел бы иметь возможность отключать или включать политику во время выполнения, а не делать это на сайте вызовов, поскольку у меня может быть несколько сайтов вызовов.

Это мой подход?

private RetryPolicy<IDisposable> GetRetryPolicy()
{
    if (!this.config.DistributedLockEnabled)
    {
        NoOpPolicy<IDisposable> policy = Policy.NoOp<IDisposable>();
        return policy;
    }

    RetryPolicy<IDisposable> lockPolicy = Policy
        .Handle<TimeoutException>()
        .OrResult<IDisposable>(d => d == null)
        .WaitAndRetry(
            this.config.WorkflowLockHandleRequestRetryAttempts,
            attempt => TimeSpan.FromSeconds(this.config.WorkflowLockHandleRequestRetryMultiplier * Math.Pow(this.config.WorkflowLockHandleRequestRetryBase, attempt)),
            (delegateResult, calculatedWaitDuration, attempt, context) =>
                {
                    if (delegateResult.Exception != null)
                    {
                        this.logger.Information(
                            "Exception {0} attempt {1} delaying for {2}ms",
                            delegateResult.Exception.Message,
                            attempt,
                            calculatedWaitDuration.TotalMilliseconds);
                    }
                });
    return lockPolicy;
}

Но, увы, это не компилируется:)

Спасибо, Стивен

1 Ответ

0 голосов
/ 21 апреля 2019

Вы можете вернуть такую ​​политику:

private static Policy GetRetryPolicy(bool useWaitAndRetry)
    {
        if (!useWaitAndRetry)
        {
            return Policy.NoOp();
        }

        return Policy
            .Handle<Exception>()
            .WaitAndRetry(new[]
            {
                TimeSpan.FromSeconds(1),
                TimeSpan.FromSeconds(2),
                TimeSpan.FromSeconds(3)
            });
    }

Это использовать так:

GetRetryPolicy(true).Execute(() =>
            {
                // Process the task here
            });
...