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 ...
随机推荐
- [LeetCode]25. Reverse Nodes in k-Group k个一组翻转链表
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- github使用手册
1.git init 2.git add README.md (增加文件夹/文件:git add dir/files) 3.git commit -m "注释内容” 4.git push - ...
- 【阿里云产品公测】服务器测性能,PTS多快好省
作者:阿里云用户goldsix PTS(性能测试服务)的官方定位是:集测试机管理.测试脚本管理.测试场景管理.测试任务管理.测试结果管理为一体的性能云测试平台. 不管定义是否高大上,一般用户尤其是我 ...
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 4、安装 ArcGIS for Server
安装ArcGIS for Server 解压server安装包,tar -xzvf ArcGIS_Server_Linux_1051_156429.tar.gz 切换到arcgis账户静默安装serv ...
- DLRS(深度学习应用于推荐系统论文汇总--2017年8月整理)
Recommender Systems with Deep Learning Alessandro:ADAAlessandro Suglia, Claudio Greco, Cataldo Musto ...
- 爬虫入门之urllib库详解(二)
爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...
- html-表单的设计
一.表单的设计 1.注册表单页面 <html> <head> <title>表单的练习</title> <script> function ...
- php xml字符串转数组
function xmltoarr($path){//xml字符串转数组 $xmlfile = file_get_contents($path);//提取xml文档中的内容以字符串格式赋给变量 $ob ...
- JS教程之实现加载图片时百分比进度
思路:思路其实很简单,ajax执行时,会生成一个event对象,其中会包含要加载的文件的大小和当前已经加载完成部分的大小,通过这两个值即可计算出百分比 事件介绍onprogress 当浏览器正在加载媒 ...
- Vaadin学习笔记——Page、UI和View在用法上的区别
前言 在Vaadin技术框架中会出现三种不同的类,用于架构Web应用.它们分别是:Page.UI.View.本文将对这三者从使用角度进行比较,试图分析三者的异同.本文完全原创,我可不是在强调版权,我只 ...