




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
窗体顶端Spring每天,都要积极的生活!在Web应用程序中执行计划任务(多线程) 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务。实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案。但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务,或者需要你支付许多额外的费用。 本文就介绍一个直接在Web应用程序中使用的简单的方法,这个方法不需要任何额外的配置即可轻松实现。由于ASP.NET站点是作为Web应用程序运行的,它并不受线程的限制,因此我们可以非常方便地在Application_Start和 Application_End事件中建立和销毁一个计划任务。下面就简单介绍一下在Web站点实现计划任务的方法。我们的例子是定时往文件里添加信息,作为例子,这里把当前的时间定时地写入文件中。一个计划任务的工作单元称之为一个任务(Job),下面的代码描述了对所有任务都可以被调度引擎计划执行的一个通用的接口,这里的每个任务实现了Execute方法,供调度引擎进行调用: public interface ISchedulerJob void Execute(); 如前所述,我们的例子是实现往文件写如字符日期,下面就是实现这一任务的方法: public class SampleJob : ISchedulerJob public void Execute() /文件保存的物理路径,CSTest为虚拟目录名称,F:InetpubwwwrootCSTest为物理路径 string p = F:InetpubwwwrootCSTest; /我们在虚拟目录的根目录下建立SchedulerJob文件夹,并设置权限为匿名可修改, /SchedulerJob.txt就是我们所写的文件 string FILE_NAME = p+ SchedulerJobSchedulerJob.txt; /取得当前服务器时间,并转换成字符串 string c = System.DateTime.Now.ToString(yyyy-mm-dd hh:MM:ss); /标记是否是新建文件的标量 bool flag = false; /如果文件不存在,就新建该文件 if (!File.Exists(FILE_NAME) flag = true; StreamWriter sr = File.CreateText(FILE_NAME); sr.Close(); /向文件写入内容 StreamWriter x = new StreamWriter(FILE_NAME,true,System.Text.Encoding.Default); if(flag) x.Write(计划任务测试开始:); x.Write( +c); x.Close(); 接下来,我们建立一个配置对象,告诉调度引擎执行什么任务和执行的时间间隔。 public class SchedulerConfiguration /时间间隔 private int sleepInterval; /任务列表 private ArrayList jobs = new ArrayList(); public int SleepInterval get return sleepInterval; public ArrayList Jobs get return jobs; /调度配置类的构造函数 public SchedulerConfiguration(int newSleepInterval) sleepInterval = newSleepInterval; 下面就是调度引擎,定时执行配置对象的任务 public class Scheduler private SchedulerConfiguration configuration = null; public Scheduler(SchedulerConfiguration config) configuration = config; public void Start() while(true) /执行每一个任务 foreach(ISchedulerJob job in configuration.Jobs) ThreadStart myThreadDelegate = new ThreadStart(job.Execute); Thread myThread = new Thread(myThreadDelegate); myThread.Start(); Thread.Sleep(configuration.SleepInterval); 所有的准备工作已经完成,下面就是激活引擎的工作了。为了让我们的任务计划执行,我们在Global.asax.cs文件里的 Applicatio_Start和Application_End里进行建立和销毁工作,首先建立一个调度进程运行的线程,我们这里的运行间隔时间为3 秒钟。 public System.Threading.Thread schedulerThread = null; protected void Application_Start(Object sender, EventArgs e) SchedulerConfiguration config = new SchedulerConfiguration(1000*3); config.Jobs.Add(new SampleJob(); Scheduler scheduler = new Scheduler(config); System.Threading.ThreadStart myThreadStart = new System.Threading.ThreadStart(scheduler.Start); System.Threading.Thread schedulerThread = new System.Threading.Thread(myThreadStart); schedulerThread.Start(); 最后还需要在程序退出时进行销毁: protected void Application_End(Object sender, EventArgs e) if (null != schedulerThread) schedulerThread.Abort(); 好了,在VS.NET里建立一个C#的Web应用程序工程,建立TaskScheduler.cs类,并修改相应的Global.asax.cs文件。为了能看到效果,我们再建立一个表单WebForm1.aspx,定时刷新来检查我们所记录的数据: 在Web应用程序中执行计划任务的例子 对工程进行编译并运行,就可以看到结果了,结果如下: 计划任务测试开始: 2003-13-10 11:08:15 2003-13-10 11:08:18 2003-13-10 11:08:21 2003-13-10 11:08:24 2003-13-10 11:08:27 2003-13-10 11:08:30需要说明的是,以上只是在Web应用程序中执行计划任务的简单例子,对于多个任务来说,需要在不同的线程内进行工作,对计划的安排也是很简单的,实际还需要站点堵塞,当机的情况。另外这里也没有进行错误的处理等工作,相信大家会写出更加完美的代码的。Eric Zhang关注 - 0粉丝 - 5关注博主0 0 0 (请您对文章做出评价) 上一篇:SQL Server实现跨库查询(跨库select insert) 下一篇:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝 的解决办法 posted on 2007-10-12 17:04 Eric Zhang 阅读(557) 评论(0) 编辑 收藏 所属分类: Asp & .NET 注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。IT新闻: 2010年宕机大事记 开心网借道爱帮团推出团购业务 增加导航功能 2011年数字音乐行业的五个预测 苹果2010年十大精彩瞬间 经历最给力一年 IDC分析WP7应用增长比Android快四大原因更多IT新闻. 知识库最新文章:.Net中Exception你这样做了么?.Net令人纠结的Null详细讲解SQL Server索引的性能问题Web在线操作Office之Word前端要给力之:URL应该有多长?网站导航:博客园首页 IT新闻 个人主页 闪存 程序员招聘 社区 博问 China-pub 计算机图书网上专卖店!6.5万品种2-8折!China-Pub 计算机绝版图书按需印刷服务相关搜索:Asp & .NET 最简洁阅读版式:在Web应用程序中执行计划任务(多线程) 导航 博客园 首页 新随笔 联系 订阅 管理 公告欢迎回来!:-)粉丝 - 5关注 - 0我的主页 个人资料我的闪存 发短消息日一二三四五六301234567891011121314151617181920212223242526272829303112345678910统计 随笔 - 193 文章 - 1 评论 - 70 引用 - 9 搜索常用链接 我的随笔 我的空间 我的短信 我的评论 更多链接 我的参与 我的新闻 最新评论 我的标签 我参与的团队 天津.NET俱乐部(0/0) ASP.NET AJAX (Atlas)学习(0/0) 我的标签 vs2005 乱码 多个dll(1) linux(1) 版本(1) URLRewrite IIS7(1) 随笔分类 Asp & .NET(74) (rss) C#(10) (rss) DataBases(47) (rss) Duwamish(5) (rss) Java (7) (rss) Linux(3) (rss) My Attitude(1) (rss) My Life(12) (rss) Others(28) (rss) PHP(1) (rss) Project Management(5) (rss) Server(10) (rss) 积分与排名 积分 - 14
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 与护理相关的法律法规
- 乳牙开髓图谱解读
- 2026届安徽省含山县英语九年级第一学期期末质量跟踪监视试题含解析
- 农村旧船改造方案范本
- 三检合一政策解读
- 心肺复苏模拟人培训
- 四川省绵阳市游仙区2026届九年级英语第一学期期末经典试题含解析
- 2026届哈尔滨市平房区化学九上期末质量检测模拟试题含解析
- 2026届雅安市重点中学化学九上期末统考模拟试题含解析
- 濉溪县2026届英语九上期末联考试题含解析
- 福建省三明市2026届高三上学期8月月考语文试卷(含答案)
- 2025年智能养老社区智能化社区活动策划建议
- 浙江新化化工股份有限公司扩建6000吨-年新型无卤有机阻燃剂项目环评报告
- 2025-2026学年人教版(2024)初中生物八年级上册教学计划及进度表
- 国有企业风险管理内控操作手册
- 缺血性卒中脑保护中国专家共识(2025)解读 3
- 2025年青海省中考道德与法治试题卷(含答案解析)
- 2025广西公需科目培训考试答案(90分)一区两地一园一通道建设人工智能时代的机遇与挑战
- 2025年检测员上岗证试题及答案
- 包装现场管理培训
- 企业安全生产体系五落实五到位规定的内容
评论
0/150
提交评论