首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Polly基础开始

从Polly基础开始
EN

Stack Overflow用户
提问于 2020-10-03 16:23:02
回答 1查看 116关注 0票数 0

我是Polly的新手,我正试图从最基础的东西开始了解它的工作原理。

为了测试重试,我尝试创建一个代码(打印),它有33%的时间来生成DivideByZeroException。当错误产生时,它上升到policy.Execute,似乎不是由Polly管理的。

有人能帮我调整一下这个代码吗?我使用的是.Net框架4.7.2。

代码语言:javascript
复制
using System;
using Polly;

class Program
{
    static void Main(string[] args)
    {
        var policy = Policy
                        .Handle<DivideByZeroException>()
                        .Retry();

        policy.Execute(() => Print());
        Console.ReadKey();
    }

    private static void Print()
    {
        var rand = new Random();
        int a = rand.Next(1000, 2000);
        int b = rand.Next(0, 2);
        Console.WriteLine("a = {0} - b {1}", a, b);
        int c = a / b;
        Console.WriteLine("c = {0}", c);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-03 16:31:47

如果设置b = 0,而不是使用Random,您将看到它正在处理异常,但它不会永远重试-在失败之前,您将看到两次打印输出。这意味着,在使用Random的情况下,有时会连续多次将b设置为0,在这种情况下,策略会耗尽其重试次数,因此会抛出。

您可以配置策略以使用Retry(n)增加重试次数。或者,您可以使用RetryForever()

如果您不希望调用代码在重试耗尽时抛出,则可以改为使用capture the result:

代码语言:javascript
复制
var result = policy.ExecuteAndCapture(() => Print());
if (result.Outcome == OutcomeType.Failure)
{
    // result.FinalException contains the exception
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64182188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档