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
c# 任务超时执行的更多相关文章
- php运用curl触发后台脚本不超时执行某项任务
运用curl 设置超时,触发后台脚本执行 例如一些需要长时间等待的任务,如创建数据库,下载网络图片等 $ch = curl_init();//$ch资源可以请求多个连接 curl_setopt($ch ...
- c# 任务超时执行组件
最近整理下各类框架,学习一下欠缺的东西.因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累. 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比 ...
- C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...
- 转 C# 给某个方法设定执行超时时间
在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.Begin ...
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...
- Java程序执行超时——Future接口介绍
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...
- http cancelled状态与ajax 超时
在最近一周,我们的前端在测试某些批量超过的某个步骤时,发现请求好像发出来,但是后台状态没有变化,说是最近才出现的问题,以前一直都是正常的,两天连续出现两次之后,来找笔者,首先检查了下中间件的日志,发现 ...
- jquery ajax超时设置
var ajaxTimeoutTest = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : 'get', //请求方式 ...
- 多线程学习之五超时模式Timer
timed[超时模式]案例:一个线程提供下载数据,另一个线程执行下载,如果有5秒钟以上,提供下载的线程没有提供数据,下载线程因超时异常,停止下载线程运行. 超时异常类 /** * */ package ...
随机推荐
- jquery监控input输入框的变化
(function($) { $.fn.watch = function(callback) { return this.each(function() { //缓存以前的值 $.data(this, ...
- java几种常见的排序算法总结
/*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int ...
- oracle学习篇十二:索引
索引: 查询User_indexes可以获取有关用户已创建的索引的详细信息. 查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息. 查询User_ind_column ...
- ajax异步请求/同源策略/跨域传值
基本概念 Ajax 全称是异步的 JavaScript 和 XML . 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进 ...
- twaver拓扑图拖拽后保存json数据
功能描述:拓扑图.对节点进行拖拽,序列化获取拓扑图信息,保存到本地localStorage,刷新页面,执行反序列化,从本地获取之前保存的数据,展现之前拖拽后的拓扑 拓展:此处存储用的是web本地存储l ...
- Android Studio笔记之快捷键
Android Studio h2{ color: #4abcde; } pre{ background-color: #f8f8f8; border: solid 1px #ccc; border- ...
- Linux下的环境部署和项目发布
1.查看系统版本 sudo uname --m i686 //表示是32位 x86_64 // 表示是64位 2.下载对应版本软件,jdk和Tomcat(切记注意版本) jdk: 下载地址:http: ...
- 生成对抗式网络 GAN的理解
转自:https://zhuanlan.zhihu.com/p/24767059,感谢分享 生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码, ...
- Oracle自定义行转列函数
--行转列自定义函数,只针对TABLE1表 --paramType是参数类型,用于判断,param1和param2是条件参数 create or replace function My_concat( ...
- ring0 关于SSDTHook使用的绕过页面写保护的原理与实现
原博:http://www.cnblogs.com/hongfei/archive/2013/06/18/3142162.html 为了安全起见,Windows XP及其以后的系统将一些重要的内存页设 ...