C# Quartz 整理
因项目需要,在C#中使用了定时程序。自然就使用了Quartz了
但是使用的时候,经过一段时间后,发现了两个重大问题,结果导致的是一样的,就是都导致了定时不会继续执行了。
第一个问题是,定时程序发布在IIS下,但是IIS自己本身是有回收机制的,然后如果到了晚上,没人操作后台了,那么IIS会自动回收定时程序。
这里可以通过代码层面解决,就是说让IIS一直处于被使用状态,自然就不会回收了。
具体的代码改动是:
在项目中的Global.asax文件里,增加一段
protected void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
//解决应用池回收问题
System.Threading.Thread.Sleep();
string strUrl = ProjectPara.ProPath;
System.Net.HttpWebRequest _HttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strUrl);
System.Net.HttpWebResponse _HttpWebResponse = (System.Net.HttpWebResponse)_HttpWebRequest.GetResponse();
System.IO.Stream _Stream = _HttpWebResponse.GetResponseStream();//得到回写的字节流
}
这个的方法触发的节点是应用程序关闭的时候会执行此方法,目的是通过HttpWebRequest发送一次请求,然后得到返回的字节流,这样每次应用程序关闭了,都会请求一次,就很好的阻止了IIS的回收。
还有一个问题是,定时程序执行中,如果程序中抛异常了,那么也会导致定时失效,原因是出现了异常,在代码中有处理,如果出现异常,直接停掉定时任务
public virtual void Execute(IJobExecutionContext context)
{
ValidationErrors validationErrors = new ValidationErrors();
//取状态值
JobDataMap dataMap = context.JobDetail.JobDataMap;
string id = dataMap.GetString(ID);//任务ID
string taskName = dataMap.GetString(TASKNAME);//任务名称
//
JobKey jobKey = context.JobDetail.Key;
string jobName = jobKey.Name;//任务名称=任务名称+任务ID
try
{
//开始执行业务逻辑
Log.Write(jobName, "开始任务>>>>>>" + jobName, "成功");
//取当前程序集
Assembly assem = Assembly.GetExecutingAssembly();
//创建任务对象并执行
Object o = assem.CreateInstance(taskName, false,
BindingFlags.ExactBinding,
null, new Object[] { }, null, null);
MethodInfo m = assem.GetType(taskName).GetMethod("RunJob");//默认调用方法
Object ret = m.Invoke(o, new Object[] { dataMap, jobName, id, taskName });
//更新任务状态
TaskJob.UpdateState(ref validationErrors, jobName, , ret.ToString());
//////////////////////////////////////////////////////////////////
if (validationErrors.Count > )
{
Log.Write(jobName, "Error", validationErrors.Error);
}
Log.Write(jobName, "<<<<<<<结束任务" + jobName, "成功");
}
catch (System.Exception e)
{
Log.Write(jobName, "Exception", e.Message);
JobExecutionException e2 = new JobExecutionException(e);
e2.UnscheduleAllTriggers = true;
throw e2;
}
}
但是并不是所有情况都需要出现异常了,就停掉trigger,可以继续执行下次,所以注视掉这句即可。
这里引申一个问题,因为定时是invoke调用的,这个方法会忽略掉内部方法的catch,直接在当前invoke中捕获。
所以这里处理下即可。
C# Quartz 整理的更多相关文章
- 任务调度quartz整理
一张图,了解quartz运行机制: 此图表示:Scheduler是容器,Trigger是多个触发器,jobDetail是多个任务,Calendar是多个日历. jobDetail任务,需要指定类实现J ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- Quartz定时任务整理
一. 介绍 Quartz是一个开源的定时任务调度框架,这里就不详细介绍了,我们直入主题Quartz主要由三部分组成 任务:JobDetail 触发器:Trigger,(分两类:SimpleTrigge ...
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- 基于.NET平台常用的框架整理(转)
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的 学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到, ...
- 【转】基于.NET平台常用的框架整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累 了一些开源的组件,就目前想到的先整理于此,如果再想到, ...
- Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblogs.com/zhangweizhong/c ...
- 基于.NET平台常用的框架整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...
- .NET平台常用的框架整理
基于.NET平台常用的框架整理 DotNet | 2016-03-31 17:13 (点击上方蓝字,可快速关注我们) 来源:天使不哭 链接:http://www.cnblogs.com/hgmyz/p ...
随机推荐
- 《Cracking the Coding Interview》——第17章:普通题——题目10
2014-04-28 23:54 题目:XML文件的冗余度很大,主要在于尖括号里的字段名.按照书上给定的方式进行压缩. 解法:这题我居然忘做了,只写了一句话的注解.用python能够相对方便地实现,因 ...
- DOS程序员手册(九)
第14章参考手册概述 本书余下的章节将向读者们介绍BIOS.DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的.在所介绍的参考手册中,每部手册都汇集了大 量的资源 ...
- Percona-Tookit工具包之pt-summary
Preface As a dba,We are obliged to master several basic tools(such as vmstat,top,netstat,ios ...
- Jforum环境搭建
前提:搭建好JDK.JRE.Tomcat.数据库 1.之前安装了Navicat Premium,所以直接用这个创建名为jforum的MySQL数据库,默认密码为空,记得设置密码,因为Jforum要用到 ...
- cloud.cfg_for_ubuntu
user: default disable_root: false preserve_hostname: false cloud_init_modules: - bootcmd - resizefs ...
- CodeForces-1061D TV Shows
题目链接 https://vjudge.net/problem/CodeForces-1061D 题面 Description There are nn TV shows you want to wa ...
- Opencv3.2.0安装包
这个资源是Opencv3.2.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载
- juqery基本选择器和层级选择器
1.基本选择器,主要通过标签名称,样式,id等选择标签,如下代码是简单的使用 (1)根据标签或者样式筛选 <!DOCTYPE html> <html lang="en&qu ...
- GCC特性之__init修饰解析 - kasalyn的专栏 - 博客频道 - CSDN.NET
, GCC特性之__init修饰解析 - kasalyn的专栏 - 博客频道 - CSDN.NET.MathJax_Hover_Frame {border-radius: .25em; -webkit ...
- 【bzoj1976】[BeiJing2010组队]能量魔方 Cube 网络流最小割
题目描述 一个n*n*n的立方体,每个位置为0或1.有些位置已经确定,还有一些需要待填入.问最后可以得到的 相邻且填入的数不同的点对 的数目最大. 输入 第一行包含一个数N,表示魔方的大小. 接下来 ...