C# Retry重试操作的解决方案

一、前言

(1)对于Thread的Abort方法,如果线程当前正在执行的是一段非托管代码,那么CLR就不会抛出ThreadAbortException,只有当代码继续回到CLR中时,才会引发ThreadAbortException。当然,即便是在CLR环境中ThreadAbortException也不会立即引发。

(2)对于BackgroundWorker的CancelAsync方法,需要设置WorkerSupportsCancellation属性为True,在执行方法内部检测CancellationPending标识,用户负责退出。

(3)对于CancellationTokenSource,场景主要为对任务设置一个预期执行时间,对超时的任务自动取消。达到时间间隔后自动触发Cancel方法,IsCancellationRequested被设置为True,用户同样需要在方法内部检测IsCancellationRequested属性。

本文在基于上述基础上,对于方法的Retry(重新执行)操作,执行时间可能比较久,容易导致主线程阻塞,因此主要以BackgroundWorker来执行相关操作。RetryProvider类图以及相关操作示例图如下:

时间: 2025-01-31 09:17:27

C# Retry重试操作的解决方案的相关文章

python异步任务celery异常崩溃时retry重试解决

python下的celery是啥东西大家应该有了解,是一个异步的任务框架 .话说,  我以前写过一个报警平台的项目,也需要任务的扩展成分布式,当时总是觉得 用celery不是那么太靠谱,所以就自己写了一个分布式的任务派发的系统. 今个和朋友聊起了分布式爬虫,这哥们说 任务有时候经常的崩溃,但是celery的retry的机制有些意思,最后看了下文档  ,又研究了下retry的参数,然后把自己的一些实战分享给大家.  代码如下 复制代码 #xiaorui.cc @celery.task(bind=T

ASP.NET中执行耗时操作的解决方案

在ASP.NET中可以利用多线程方式来达到同样的目的. 多线程  代码如下 复制代码 <%@ Page language="c#" Codebehind="WebForm54.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm54" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transit

云计算设计模式(十八)——重试模式

云计算设计模式(十八)--重试模式 启用应用程序来处理预期的,暂时的失败时,它会尝试连接到由透明的重试操作了以前失败的期望,失败的原因是瞬时的服务或网络资源.这种模式可以提高应用程序的稳定性. 背景和问题 该通信的应用程序与在云中运行的元素必须是可能发生在这样的环境中的瞬时故障敏感.这些故障包括网络连接的过程中出现时,一个服务是忙碌的瞬时损失的组件和服务中,服务的临时不可用,或超时. 这些故障一般是自校正的,如果经过一个合适的延迟被重复触发一个故障的动作很可能是成功的.例如,数据库服务,它正在处

Spring retry基本使用

背景介绍 在实际工作过程中,重试是一个经常使用的手段.比如MQ发送消息失败,会采取重试手段,比如工程中使用RPC请求外部服务,可能因为网络 波动出现超时而采取重试手段......可以看见重试操作是非常常见的一种处理问题,系统设计的手段 而在之前我们项目中处理重拾操作依赖MQ自身的重试机制,但是这种机制不是很灵活,如果某些功能没有使用MQ的话,那么就不是那么方便了,而本文介绍的Spring-Retry却能够以一种很优雅的方式解决这种问题,当然目前版本的Spring-retry还不是完美的,还是有待

PHP实现带重试功能的curl连接示例_php技巧

本文实例讲述了PHP实现带重试功能的curl连接方法.分享给大家供大家参考,具体如下: /** * @param string $url 访问链接 * @param string $target 需要重试的标准: 返回结果中是否包含$target字符串 * @param int $retry 重试次数, 默认3次 * @param int $sleep 重试间隔时间, 默认1s * @return bool|mixed curl返回结果 * desc 有重试功能的curlget */ funct

spring-retry重试与熔断详解—《亿级流量》内容补充

本文是<亿级流量网站架构核心技术--跟开涛学搭建高可用高并发系统>第6章 超时与重试机制补充内容. spring-retry项目实现了重试和熔断功能,目前已用于SpringBatch.Spring Integration等项目. RetryOperations定义了重试的API,RetryTemplate提供了模板实现,线程安全的,同于Spring 一贯的API风格,RetryTemplate将重试.熔断功能封装到模板中,提供健壮和不易出错的API供大家使用. 首先,RetryOperatio

动态-线性表、树、图的操作和演示

问题描述 线性表.树.图的操作和演示 那个动态演示怎么弄 啊.以动画形式演示在其上的插入.查找.删除等操作. 解决方案 是不是数据结构课件中的演示~~~ 解决方案二: 动画?也就是说不是编程来实现动画,可以考虑动画制作软件来实现.

mfc-MFC登陆教务处“操作超时”

问题描述 MFC登陆教务处"操作超时" 2C 这个是用HttpWatch抓到的包 #include ""AFXINET.H""INT CLOGIN::GetFile(const CString strUrl)//const CString strSavePath) { // AfxMessageBox(strUrl); unsigned short nPort; //用于保存目标HTTP服务端口 CString strServer strObje

EF code first 实体类修改、添加、删除操作问题

问题描述 EF code first 实体类修改.添加.删除操作问题 EF code First 怎么来更新已存在的数据库结构? 比如:在实体类中我新添加了一个字段.修改字段名称或者类型.删除一个字段 等操作后我怎么更新到已存在的数据库对于表中去. 担心:我在持续开发中,改变了数据库的结构,如果这时候用户已经用以前的版本创建好数据库并且有了许多数据,假使我的修改只增加了一个表的一个可空列.而为此我只能重新创建数据库.请问有没有别的办法,能够把新的数据库结构在不损伤数据的情况下更新到部署好的环境中