[英]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.