返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#异常执行重试的实现方法
  • 917
分享到

C#异常执行重试的实现方法

2024-04-02 19:04:59 917人浏览 安东尼
摘要

一 模式介绍 重试模式,是应用在异常处理中,发生异常的时候,能够对业务程序进行重新调用,在实际中,可以使用Polly提供稳定,简单的用法,自己实现主要是对模式的一种了解。 二 模式实

一 模式介绍

重试模式,是应用在异常处理中,发生异常的时候,能够对业务程序进行重新调用,在实际中,可以使用Polly提供稳定,简单的用法,自己实现主要是对模式的一种了解。

二 模式实现


public class RetryPattern
    {
        

        #region 构造函数

        public RetryPattern()
        {
        }

        #endregion 构造函数

        #region 变量

        private uint MaxTryCount; // 最大重试次数
        private uint CurrentTryCount; // 当前重试的次数
        private bool RunResult = true; // 执行结果

        #endregion 变量

        #region 方法

        #region 设置最大重试次数

        public void SetMaxCount(uint tryCount)
        {
            // 校验
            if (tryCount == 0) throw new ArgumentException("重试次数不能为0");

            MaxTryCount = tryCount;
        }

        #endregion 设置最大重试次数

        #region 是否需要重试

        public bool IsRetry()
        {
            if (RunResult || CurrentTryCount == MaxTryCount)
                return false;
            else
            {
                RunResult = true;
                return true;
            }
        }

        #endregion 是否需要重试

        #region 获取当前重试次数

        public uint GetCurrentTryCount()
        {
            return CurrentTryCount + 1;
        }

        #endregion 获取当前重试次数

        #region 重试

        public void RetryHandle()
        {
            RunResult = false;
            CurrentTryCount++;
        }

        #endregion 重试

        #endregion 方法
    }

ps:下面通过代码看下C# 异常重试策略


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.windows.FORMs;
using Polly;
using Polly.Bulkhead;
using Polly.CircuitBreaker;
using Polly.Fallback;
using Polly.NoOp;
using Polly.ReGIStry;
using Polly.Retry;
using Polly.Timeout;
using Polly.Utilities;
using Polly.Wrap;
using System.net.Http;

namespace CircuitBreak_Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                var retryTwoTimesPolicy =
                     Policy
                         .Handle<DivideByZeroException>()
                         .Retry(3, (ex, count) =>
                         {
                             Console.WriteLine("执行失败! 重试次数 {0}", count);
                             Console.WriteLine("异常来自 {0}", ex.GetType().Name);
                         });
                retryTwoTimesPolicy.Execute(() =>
                {
                    Compute();
                });
            }
            catch (DivideByZeroException e1)
            {
                Console.WriteLine($"Excuted Failed,Message: ({e1.Message})");

            }

            Policy policy = Policy.Handle<TimeoutException>()
               .WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(5), (exception, retryCount) =>
               {
                   //logger.Error(exception);
                   string xx = "";
               });

            var result = policy.ExecuteAsync(() => Test());


            Policy _circuitBreakerPolicy = Policy
                .Handle<HttpRequestException>()
                .Or<TimeoutRejectedException>()
                .Or<TimeoutException>()
                .CircuitBreakerAsync(
                    exceptionsAllowedBeforeBreaking: 5,
                    durationOfBreak: new TimeSpan(),
                    onBreak: (ex, breakDelay) =>
                    {
                        
                    },
                    onReset: () => { },
                    onHalfOpen: () => { }
                    );

            var fallBackPolicy =
               Policy<string>
                   .Handle<Exception>()
                   .Fallback("执行失败,返回Fallback");

            var fallBack = fallBackPolicy.Execute(() =>
            {
                throw new Exception();
            });
            Console.WriteLine(fallBack);

           
        }

        static int Compute()
        {
            var a = 0;
            return 1 / a;
        }

        private static async Task Test()
        {
            using (HttpClient httpClient = new HttpClient())
            {
                var response = httpClient.GetAsync("http://news1.cnblogs.com/CateGory/GetCategoryList?biGCateId=11&loadType=0").Result;
                await response.Content.ReadAsStringAsync();
            }
        }
    }
}

到此这篇关于C#异常执行重试的一种实现方法的文章就介绍到这了,更多相关C#异常重试内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#异常执行重试的实现方法

本文链接: https://lsjlt.com/news/133807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#异常执行重试的实现方法
    一 模式介绍 重试模式,是应用在异常处理中,发生异常的时候,能够对业务程序进行重新调用,在实际中,可以使用Polly提供稳定,简单的用法,自己实现主要是对模式的一种了解。 二 模式实...
    99+
    2024-04-02
  • Oracle SQL执行计划异常的处理方法
    这篇文章主要介绍“Oracle SQL执行计划异常的处理方法”,在日常操作中,相信很多人在Oracle SQL执行计划异常的处理方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • Pytest执行unittest TestSuite(测试套件)的实现方法
    前言 TestSuite一直是unittest的灵活与精髓之处,在繁多的测试用例中,可以任意挑选和组合各种用例集,比如smoke用例集、level1用例集、webtest用例集、bu...
    99+
    2024-04-02
  • C++执行shell命令的多种实现方法
    目录1、system(执行shell 命令)2、popen(建立管道I/O)3、使用vfork()新建子进程,然后调用exec函数族在linux系统下,用C++程序执行shell命令...
    99+
    2024-04-02
  • python 如何实现跳过异常继续执行
    目录python如何跳过异常继续执行下面有两种解决方法拓展资料python错误之NameError原因解决办法python如何跳过异常继续执行 下面有两种解决方法 第一种是类似if&...
    99+
    2024-04-02
  • python怎么实现跳过异常继续执行
    这篇文章主要介绍“python怎么实现跳过异常继续执行”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现跳过异常继续执行”文章能帮助大家解决问题。python如何跳过异常继续执行下面...
    99+
    2023-07-02
  • python抛出异常继续执行的方法是什么
    在Python中,可以使用try-except语句来捕获和处理异常,从而使程序能够在抛出异常后继续执行。具体的方法是:```pyth...
    99+
    2023-09-06
    python
  • Android加载对话框同时异步执行实现方法
    Android中通过子线程连接网络获取资料,同时显示加载进度对话框给用户的操作,需要Thread和Handler来完成,在Thread中执行比较耗时的代码,完成后再通过Hand...
    99+
    2022-06-06
    方法 异步执行 异步 Android
  • Python中异常重试的解决方案详解
    前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。 原先的流程: def crawl_page(url): pass def l...
    99+
    2022-06-04
    重试 详解 异常
  • C#实现异步的常用方式总结
    目录前言.NET异步编程模式C#异步有四种实现方式1、异步方法(Async Method TAP模式)2、任务并行库(TPL, Task Parallel Library&...
    99+
    2023-05-19
    C#实现异步方式 C#实现异步 C# 异步
  • redis执行lua脚本的实现方法
    目录1. 语法格式2.类型转换3.lua脚本3.1 script命令3.2 脚本原子性3.3 脚本缓存和EVALSHA3.4 全局变量保护3.5 日志记录从redis 2.6.0版本...
    99+
    2024-04-02
  • Node端异常捕获的实现方法
    目录常见Node报错处理机制try catchNode原生错误处理机制Promiseasync/await + try catchunhandledRejection特殊情况如何捕获...
    99+
    2024-04-02
  • python异常处理并调试的方法
    这篇文章主要介绍“python异常处理并调试的方法”,在日常操作中,相信很多人在python异常处理并调试的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python异常处理并调试的方法”的疑惑有所帮助!...
    99+
    2023-06-29
  • JavaScript异步操作同步执行的方法
    本文小编为大家详细介绍“JavaScript异步操作同步执行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript异步操作同步执行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • C++ 技术中的异常处理:异常安全性的概念及实现方法有哪些?
    c++++ 异常处理通过 try-catch 块、noexcept 规范、动态检查和智能指针等方法,确保程序在处理异常时保持健壮性、可恢复性和无资源泄漏。在异常发生时,try-catch...
    99+
    2024-05-09
    异常处理 异常安全性 c++
  • 详解Pytest测试用例的执行方法
    pytest概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度地控制要测试的测试用...
    99+
    2024-04-02
  • C++ 函数重载中的异常处理如何进行?
    c++++ 中重载函数的异常处理遵循单一异常处理点原则。noexcept 规范符用于指定函数是否引发异常:noexcept(true) 表示不引发,noexcept(false) 则表示...
    99+
    2024-04-27
    c++ 异常处理 作用域
  • PHPLaravel框架异步执行的实现详解
    目录Laravel 异步执行任务大致操作代码粘贴其他操作Laravel 异步执行任务 不影响当前程序继续执行 描述:用户操作时 要执行计算量大且不影响主操作的任务时,可采用异步方式执...
    99+
    2024-04-02
  • Spring异常实现统一处理的方法
    目录1.统一处理异常的机制2.关于统一处理异常的方法3.关于处理异常的方法的执行特点1.统一处理异常的机制 Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需...
    99+
    2022-12-08
    Spring异常统一处理 Spring异常处理
  • Shell脚本避免重复执行的方法
    很多用cron定时执行的shell脚本可能会由于各种原因执行很久,会有必要在运行的时候先检查一下自身是否还在运行。本文提供的linux shell脚本用以检查以命令sh ...来执行的shell脚本。要对其...
    99+
    2022-06-04
    脚本 方法 Shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作