c# 任务超时执行组件
最近整理下各类框架,学习一下欠缺的东西。因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累。
现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比较,全部自己造。
我们在开发服务端时,有一个很严重的问题,就是多线程处理。这就有个任务长期运行,频繁启动,以及超时问题。
java中的线程池很容易实现,c#中对应的就是Task,也可以。
但是我们在开发过程中遇到过一个问题,现在启用国产软件,我们采用了一些国产数据库,这些数据库在运行一段时间后,
数据库连接不返回了,一直卡着,一直要占用使用的线程,如果是服务端程序,这就死翘翘了,一段时间后,进程里面很有很多线程,然后变慢,然后卡死。
现在整理一个服务端框架,为了解决这类问题,我自己开发了一个线程框架库,暂时不考虑它的性能优化,已经完成,这个框架作为我的服务框架一部分,我把它抽取出来,上传GIT;
线程主要结构和使用:
1.定义5类委托,你可以提供5类委托实现出来,我没有定义为接口,因为c#里面委托更加贴合方法。你可以自己改造成接口
2.为5类委托专门写了出来委托类,就是在其中启动方法,开启线程,在线程中调用委托;把这些类统一称为TaskFutru
3.TaskFutrue等待提交处理的委托对象,一旦提交了委托就执行;如果1分钟以内没有委托提交,则退出该线程;线程销毁,设置状态
4.TaskFutrue中几个状态,分别是Cancel,Finsh,Complete,分别表示该类的使用情况
5.ExecutorsThread类是最基础的了,其中的5个方法提交5类委托对象,在方法内部,采用Task类,监视超时,一旦任务超时,则立即调用TaskFutrue中的方法,取消线程,关闭线程,其中调用了Thread.abort()方法
6.线程框架,我采用了.Net标准类型,测试发现.Net Core不支持Thread.abort(),所以在StaticThreadFactory定义了变量,
如果需要关闭线程,就增加1,如果线程自动退出则减少1,设置了一个最大值,如果计数超过最大值,在ExecutorsThread中提交处理委托,则引起异常ThreadMaxEception(自定义),需要根据自己的业务处理该异常,无非是打印异常,终止提交或者重启程序,这个只能根据自己的业务了。
7.所有TaskFutrue了都继承了接口ITaskThread
该项目暂时命名为ExecutorService;以后发现问题会持续修改更新。
我有一段时间没有关注c#了,如果c#本身已经有了该功能,或者可以简单的变相实现,或者有更加好的优秀开发组件实现了该功能,请大家留言告诉我,我也想现成的啊,不想写啊。
但是,这个类库只能在服务端使用,为啥?因为耗资源多啊,你想想,你调用执行是不是要使用一个线程,底层执行委托是不是一个线程,然后监视超时是不是一个线程。也就是整个超时执行控制需要3个线程来完成一个任务。所以出来混是要换的。
项目地址:
https://github.com/jinyuttt/ExecutorService.git
---------------------
作者:jason成都
来源:CSDN
原文:https://blog.csdn.net/jinyuttt/article/details/82927398?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
c# 任务超时执行组件的更多相关文章
- c# 任务超时执行
最近整理下各类框架,学习一下欠缺的东西.因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累. 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比 ...
- php运用curl触发后台脚本不超时执行某项任务
运用curl 设置超时,触发后台脚本执行 例如一些需要长时间等待的任务,如创建数据库,下载网络图片等 $ch = curl_init();//$ch资源可以请求多个连接 curl_setopt($ch ...
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...
- C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...
- 转 C# 给某个方法设定执行超时时间
在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.Begin ...
- JMeter学习-005-JMeter 主要组件概要介绍及执行顺序
本文将对 JMeter 主要组件(主要涉及 Threads(Users).Test Fragment.逻辑控制器.配置元件.定时器.前置处理器.Sampler.后置处理器.断言.监听器 十大组件)进行 ...
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...
- Spring Cloud各组件超时总结
Ribbon的超时 全局设置: ribbon: ReadTimeout: 60000 ConnectTimeout: 60000 1 2 3 局部设置: service-id: ribbon: Rea ...
- Java程序执行超时——Future接口介绍
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...
随机推荐
- Sturct类型装箱时会遇到的问题
Object在拆箱时会在栈空间生成一个临时变量.所以Struct在使用时尽量将内容都声明为readonly为好 [<Struct>] type Point= val mutable X:d ...
- 微信token验证源码分享(c#版)
在开发时遇到一个问题: 上线后提交申请微信提示"您的服务器没有正确响应token验证...",我查看日志发现根本就没有接收到来自微信的参数. 后来我又记录了微信请求方式和请求的字符 ...
- 2017 年 9 月 27 日 js(文本框内容添加到select)
写法 <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- guava的限流工具RateLimiter使用
guava限流工具使用 非常详细的一篇使用博客:https://www.cnblogs.com/yeyinfu/p/7316972.html 1,原理:Guava RateLimiter基于令牌桶算法 ...
- 使用Spring的AOP实现切面日志
AOP切面日志的使用方式 @Aspect @Component public class HttpAspect { private static final Logger logger = Logge ...
- js之箭头函数
原文 ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: ...
- owin解决跨域js请求
最近在用owin打了一个建议的http的api服务,但遇到了js跨域访问的问题,后来在网上找到了答案,已帮助遇到此问题的人 1.首先nuget先按着owin依赖的包,然后至关重要的一步是引用Micro ...
- OLEDB 简单数据查找定位和错误处理
在数据库查询中,我们主要使用的SQL语句,但是之前也说过,SQL语句需要经历解释执行的步骤,这样就会拖慢程序的运行速度,针对一些具体的简单查询,比如根据用户ID从用户表中查询用户具体信息,像这样的简单 ...
- javascript统计一个字符在一段字符串出现次数
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" ...
- HTML 提高页面加载速度的方法
(1)减少 HTTP 的请求.(合并资源文件 和 使用图片精灵 : (2)把CSS 放头部,把 JavaScript 放到 body 标签尾部: (3)定义图片的宽和高: (4)定义字符集: (5) ...