繁体   English   中英

循环内Polly重试的问题

[英]Issue with the Polly retry inside loop

我在抛出异常时使用Polly重试策略重试。在这里,我正在尝试在循环内使用该重试策略。因此在执行foreach循环时,如果抛出任何异常,则Polly重试。这部分工作正常。但是我想继续重试后在循环内进行下一次迭代,但是2次重试后将引发最终异常并返回到调用方法。

static void Main(string[] args)
    {
        RetryPolicy();
    }

    private static void RetryPolicy()
    {
        try
        {
            var retryPolicy = Policy.Handle<Exception>().Retry(2);
            List<int> list = new List<int>();
            list.AddRange(new int[] { 0, 1, 2, 3, 4 });
            foreach(var item in list)
            {
               retryPolicy.Execute(() => Calculate(item));
            }
        }
        catch (Exception ex)
        {
        }
    }

    private static void Calculate(int j)
    {
       int a = 10;
       int b = j;
       var c = a / b;
    }

在第一次迭代中,它给出了错误,在2次重试之后,我想返回到循环并为每个循环继续执行其他项。是否有任何方法可以通过Polly实现呢? 请提出建议。

您的try/catch放置在错误的位置-应该在循环内。 这样,当Polly在最终重试后引发异常时,将捕获并处理该异常(请不要使用空的catch),然后循环将继续。

但是还有一个更好的方法:删除try / catch并使用ExecuteAndCapture()-这将返回一个结果,指示总体上是成功还是失败。 然后做一些事情:

private static void RetryPolicy()
{
    var retryPolicy = Policy.Handle<Exception>().Retry(2);
    List<int> list = new List<int>();
    list.AddRange(new int[] { 0, 1, 2, 3, 4 });
    foreach(var item in list)
    {
       var policyResult = retryPolicy.ExecuteAndCapture(() => Calculate(item));
       if (policyResult.Outcome != OutcomeType.Successful) 
       {
           // do something remedial. then the loop can continue.
       }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM