C#下有什么办法可以实现毫秒级的计划任务

& & & 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务。实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案。但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务,或者需要你支付许多额外的费用。 本文就介绍一个直接在Web应用程序中使用的简单的方法,这个方法不需要任何额外的配置即可轻松实现。   由于ASP.NET站点是作为Web应用程序运行的,它并不受线程的限制,因此我们可以非常方便地在Application_Start和Application_End事件中建立和销毁一个计划任务。下面就简单介绍一下在Web站点实现计划任务的方法。我们的例子是定时往文件里添加信息,作为例子,这里把当前的时间定时地写入文件中。   一个计划任务的工作单元称之为一个任务(Job),下面的代码描述了对所有任务都可以被调度引擎计划执行的一个通用的接口,这里的每个任务实现了Execute方法,供调度引擎进行调用:
1 public interface ISchedulerJob
void Execute();
  如前所述,我们的例子是实现往文件写如字符日期,下面就是实现这一任务的方法:
1 public class SampleJob : ISchedulerJob
3 public void Execute()
5 //文件保存的物理路径,CSTest为虚拟目录名称,F:\Inetpub\wwwroot\CSTest为物理路径
6 string p = @"C:\Users\Jack\Desktop\AutoRun\AutoRun";
7 //我们在虚拟目录的根目录下建立SchedulerJob文件夹,并设置权限为匿名可修改,
8 //SchedulerJob.txt就是我们所写的文件
9 string FILE_NAME = p+ "\\SchedulerJob\\SchedulerJob.txt";
10 //取得当前服务器时间,并转换成字符串
11 string c = System.DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss");
12 //标记是否是新建文件的标量
13 bool flag = false;
14 //如果文件不存在,就新建该文件
15 if (!File.Exists(FILE_NAME))
17 flag = true;
18 StreamWriter sr = File.CreateText(FILE_NAME);
19 sr.Close();
21 //向文件写入内容
22 StreamWriter x = new StreamWriter(FILE_NAME,true,System.Text.Encoding.Default);
23 if(flag) x.Write("计划任务测试开始:");
24 x.Write("\r\n"+c);
25 x.Close();
  接下来,我们建立一个配置对象,告诉调度引擎执行什么任务和执行的时间间隔。
1 public class SchedulerConfiguration
3 //时间间隔
4 private int sleepI
5 //任务列表
6 private ArrayList jobs = new ArrayList();
8 public int SleepInterval { get { return sleepI } }
9 public ArrayList Jobs { get { return } }
11 //调度配置类的构造函数
12 public SchedulerConfiguration(int newSleepInterval)
14 sleepInterval = newSleepI
18 下面就是调度引擎,定时执行配置对象的任务
20 public class Scheduler
22 private SchedulerConfiguration configuration = null;
24 public Scheduler(SchedulerConfiguration config)
26 configuration =
29 public void Start()
31 while(true)
33 //执行每一个任务
34 foreach(ISchedulerJob job in configuration.Jobs)
36 ThreadStart myThreadDelegate = new ThreadStart(job.Execute);
37 Thread myThread = new Thread(myThreadDelegate);
38 myThread.Start();
39 Thread.Sleep(configuration.SleepInterval);
  所有的准备工作已经完成,下面就是激活引擎的工作了。为了让我们的任务计划执行,我们在Global.asax.cs文件里的Applicatio_Start和Application_End里进行建立和销毁工作,首先建立一个调度进程运行的线程,我们这里的运行间隔时间为3秒钟。
1 public System.Threading.Thread schedulerThread = null;
2 protected void Application_Start(Object sender, EventArgs e)
4 SchedulerConfiguration config = new SchedulerConfiguration(1000*3);
5 config.Jobs.Add(new SampleJob());
6 Scheduler scheduler = new Scheduler(config);
7 System.Threading.ThreadStart myThreadStart = new System.Threading.ThreadStart(scheduler.Start);
8 System.Threading.Thread schedulerThread = new System.Threading.Thread(myThreadStart);
9 schedulerThread.Start();
  最后还需要在程序退出时进行销毁:
1 protected void Application_End(Object sender, EventArgs e)
3 if (null != schedulerThread)
5 schedulerThread.Abort();
  好了,在VS.NET里建立一个C#的Web应用程序工程,建立TaskScheduler.cs类,并修改相应的Global.asax.cs文件。为了能看到效果,我们再建立一个表单WebForm1.aspx,定时刷新来检查我们所记录的数据:
1 &%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
2 Inherits="CSTest.WebForm1" %&
3 &!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" &
6 &title&在Web应用程序中执行计划任务的例子&/title&
7 &meta http-equiv="refresh" content="10"&
8 &meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"&
9 &meta name="CODE_LANGUAGE" Content="C#"&
10 &meta name="vs_defaultClientScript" content="JavaScript"&
11 &meta name="vs_targetSchema" content="/intellisense/ie5"&
12 &/HEAD&
13 &body MS_POSITIONING="GridLayout"&
14 &form id="Form1" method="post" runat="server"&
15 &iframe style="width:100%;height:100%" src="SchedulerJob/SchedulerJob.txt"&&/iframe&
16 &/form&
17 &/body&
18 &/HTML&&
  对工程进行编译并运行,就可以看到结果了,结果如下:
计划任务测试开始:
11:08:30 &
  需要说明的是,以上只是在Web应用程序中执行计划任务的简单例子,对于多个任务来说,需要在不同的线程内进行工作,对计划的安排也是很简单的,实际还需要站点堵塞,当机的情况。另外这里也没有进行错误的处理等工作,相信大家会写出更加完美的代码的。
点击下载源码:
阅读(...) 评论()问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
语言:C# Winform
需求:假设有个任务一天要执行N次
目前的解决方案:随机生成当天的N个时间点(比如:13:05:35),然后使用计时器来触发每一个匹配到的任务,以此来完成一天的N次任务
请问,还有其他更好的解决方案吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果是在linux环境下,cron将是不二选择!是一份guide,:)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Windows 下可以使用
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
系统“计划任务”
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Linux 下 crontab,Windows 下 任务计划
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个 Quartz.net
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:C#计划任务_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#计划任务
&&C#实现操作系统计划任务
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢你可以在Windows&计划任务管理器里面添加计划任务,调试OK后导出XML文件,然后在要部署的计算机上执行CMD导入命令,把计划任务信息配置导入到服务器上的计划任务列表中,命令如下:
SCHTASKS /CREATE /XML C:\001.XML /TN "定时清理Chroma Mi 系统Logs"
SCHTASKS命令使用相关参考:
SCHTASKS /parameter [arguments]
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任
创建新计划任务。
删除计划任务。
显示所有计划任务。
更改计划任务属性。
按需运行计划任务。
中止当前正在运行的计划任务。
显示与计划的任务名称相应的安全标识符。
显示此帮助消息。
Examples(范例):查询此帮助信息。
SCHTASKS /?
SCHTASKS /Run /?
SCHTASKS /End /?
SCHTASKS /Create /?
SCHTASKS /Delete /?
SCHTASKS /Qry
SCHTASKS /Change /?
SCHTASKS /ShowSid /?
-------------------------
《SCHTASKS /Run》命令
SCHTASKS /Run [/S system [/U username [/P [password]]]] [/I] /TN taskname
按需运行计划任务。
指定要连接到的远程系统。
指定应在其中执行 schtasks.exe
的用户上下文。
[password]
为给定的用户上下文指定密码,如果省略则
提示输入。
忽略任何限制立即运行任务。
标识要立即运行的计划任务。
显示此帮助消息。
SCHTASKS /Run /?
SCHTASKS /Run /TN "Start Backup"
SCHTASKS /Run /S system /U user /P password /I /TN&备份和还原&
----------------------------------
《SCHTASKS /End》命令
SCHTASKS /End [/S system [/U username [/P [password]]]] /TN taskname
停止正在运行的计划任务。
指定要连接到的远程系统。
指定应在其中执行
schtasks.exe 的用户上下文。
[password]
为给定的用户上下文指定密码。
如果已忽略,将提示输入密码。
指定要终止的计划任务。
显示此帮助消息。
SCHTASKS /End /?
SCHTASKS /End /TN "Start Backup"
SCHTASKS /End /S system /U user /P password /TN "Backup and Restore"
----------------------------
《SCHTASKS /Create》命令。
SCHTASKS /Create [/S system [/U username [/P [password]]]]
[/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
[/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F]
允许管理员在本地或远程系统上创建计划任务。
指定要连接到的远程系统。如果省略这个
系统参数,默认是本地系统。
指定应在其中执行 SchTasks.exe 的用户上下文。
[password]
指定给定用户上下文的密码。如果省略则
提示输入。
指定任务在其下运行的&运行方式&用户
帐户(用户上下文)。对于系统帐户,有效
值是 ""、"NT AUTHORITY\SYSTEM" 或
"SYSTEM"。
对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
"NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
对这三个也都可用。
[password]
指定&运行方式&用户的密码。要提示输
入密码,值必须是 "*" 或无。系统帐户会忽略该
密码。必须和 /RU 或 /XML 开关一起使用。
指定计划频率。
有效计划任务:
MINUTE、 HOURLY、DAILY、WEEKLY、
MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
改进计划类型以允许更好地控制计划重复
周期。有效值列于下面&修改者&部分中。
指定该周内运行任务的日期。有效值:
MON、T、WED、THU、FRI、SAT、SUN
和对 MONTHLY 计划的 1 - 31
(某月中的日期)。通配符&*&指定所有日期。
指定一年内的某月。默认是该月的第一天。
有效值: JAN、FEB、MAR、APR、MAY、JUN、
JUL、 AUG、SEP、OCT、NOV
和 DEC。通配符
&*& 指定所有的月。
指定运行一个已计划的 ONIDLE 任务之前
要等待的空闲时间。
有效值范围: 1 到 999 分钟。
指定唯一识别这个计划任务的名称。
指定在这个计划时间运行的程序的路径
和文件名。
例如: C:\windows\system32\calc.exe
指定运行任务的开始时间。
时间格式为 HH:mm (24 小时时间),例如 14:30 表示
2:30 PM。如果未指定 /ST,则默认值为
当前时间。/SC ONCE 必需有此选项。
用分钟指定重复间隔。这不适用于
计划类型: MINUTE、HOURLY、
ONSTART, ONLOGON, ONIDLE, ONEVENT.
有效范围: 1 - 599940 分钟。
如果已指定 /ET 或 /DU,则其默认值为
指定运行任务的结束时间。
时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT.
指定运行任务的持续时间。
时间格式为 HH:mm。这不适用于 /ET 和
计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
在结束时间或持续时间终止任务。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT.
必须指定 /ET 或 /DU。
指定运行任务的第一个日期。
格式为 yyyy/mm/dd。默认值为
当前日期。这不适用于计划类型: ONCE、
ONSTART, ONLOGON, ONIDLE, ONEVENT.
指定此任务运行的最后一天的日期。
格式是 yyyy/mm/dd。这不适用于计划类型:
ONCE、ONSTART、ONLOGON、ONIDLE。
ChannelName
为 OnEvent 触发器指定事件通道。
仅有在 /RU 用户当前已登录且
作业正在运行时才可以交互式运行任务。
此任务只有在用户已登录的情况下才运行。
不储存任何密码。任务以给定用户的身份
非交互的方式运行。只有本地资源可用。
标记在最终运行完任务后删除任务。
从文件的指定任务 XML 中创建任务。
可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
主体时单独使用 /RP。
创建 Vista 以前的平台可以看见的任务。
不兼容 /XML。
如果指定的任务已经存在,则强制创建
任务并抑制警告。
为作业设置运行级别。有效值为
LIMITED 和 HIGHEST。默认值为 LIMITED。
/DELAY delaytime
指定触发触发器后延迟任务运行的
等待时间。时间格式为
mmmm:ss。此选项仅对计划类型
ONSTART, ONLOGON, ONEVENT.
显示此帮助消息。
修改者: 按计划类型的 /MO 开关的有效值:
1 到 1439 分钟。
1 - 23 小时。
1 到 365 天。
1 到 52 周。
无修改者。
ONSTART: 无修改者。
ONLOGON: 无修改者。
无修改者。
MONTHLY: 1 到 12,或
FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。
XPath 事件查询字符串。
==& 在远程机器 "ABC" 上创建计划任务 "doc",
该机器每小时在 "runasuser" 用户下运行 notepad.exe。
SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC HOURLY /TN doc /TR notepad
==& 在远程机器 "ABC" 上创建计划任务 "accountant",
在指定的开始日期和结束日期之间的开始时间和结束时间内,
每隔五分钟运行 calc.exe。
SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00
/SD 06/06/2006 /ED 06/06/2006 /RU runasuser /RP userpassword
==& 创建计划任务 "gametime",在每月的第一个星期天
运行&空当接龙&。
SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime
/TR c:\windows\system32\freecell
==& 在远程机器 "ABC" 创建计划任务 "report",
每个星期运行 notepad.exe。
SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC WEEKLY /TN report /TR notepad.exe
==& 在远程机器 "ABC" 创建计划任务 "logtracker",
每隔五分钟从指定的开始时间到无结束时间,
运行 notepad.exe。将提示输入 /RP
SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN logtracker
/TR c:\windows\system32\notepad.exe /ST 18:30
/RU runasuser /RP
==& 创建计划任务 "gaming",每天从 12:00 点开始到
14:00 点自动结束,运行 freecell.exe。
SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00
/ET 14:00 /K
==& 创建计划任务&EventLog&以开始运行 wevtvwr.msc
只要在&系统&通道中发布事件 101
SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
/EC System /MO *[System/EventID=101]
==& 文件路径中可以加入空格,但需要加上两组引号,
一组引号用于 CMD.EXE,另一组用于 SchTasks.exe。用于 CMD
的外部引号必须是一对双引号;内部引号可以是一对单引号或
一对转义双引号:
SCHTASKS /Create
/tr "'c:\program files\internet explorer\iexplorer.exe'
\"c:\log data\today.xml\"" ...
--------------------------------
《SCHTASKS /Delete》命令。
SCHTASKS /Delete [/S system [/U username [/P [password]]]]
/TN taskname [/F]
删除一个或多个计划任务。
指定要连接到的远程系统。
指定 schtasks.exe
要执行的用户上下文。
[password]
指定给定用户上下文密码。如果省略则
提示输入。
指定要删除的计划任务名称。
可以使用通配符 "*" 来删除所有任务。
强制删除该任务,而且
如果指定的任务当前正在运行,则抑制警告。
显示此帮助消息。
SCHTASKS /Delete /TN * /F
SCHTASKS /Delete /TN "Backup and Restore"
SCHTASKS /Delete /S system /U user /P password /TN "Start Restore"
SCHTASKS /Delete /S system /U user /P password /TN "Start Backup" /F
---------------------------
《SCHTASKS /Qry》命令。
SCHTASKS /Qry [/S system [/U username [/P [password]]]]
[/FO format | /XML [xml_type]] [/NH] [/V] [/TN taskname] [/?]
允许管理员显示本地或远程系统上的计划任务。
指定要连接到的远程系统。
指定 schtasks.exe 要执行的用户上下文。
[password]
指定给定的用户上下文密码。如果省略则
提示输入。
为输出指定格式。有效值: TABLE、LIST、CSV。
指定在输出中不显示列标题。
只对 TABLE 格式有效。
显示详细任务输出。
指定要检索其信息
的任务名称,否则会检索所有任务名称的信息。
[xml_type]
以 XML 格式显示任务定义。
如果 xml_type 为 ONE,则输出为一个有效 XML 文件。
如果 xml_type 不存在,则输出将为
所有 XML 任务定义的串联。
显示此帮助消息。
SCHTASKS /Qry
SCHTASKS /Qry /?
SCHTASKS /Qry /S system /U user /P password
SCHTASKS /Qry /FO LIST /V /S system /U user /P password
SCHTASKS /Qry /FO TABLE /NH /V
---------------------------
《SCHTASKS /Change》命令。
SCHTASKS /Change [/S system [/U username [/P [password]]]] /TN taskname
{ [/RU runasuser] [/RP runaspassword] [/TR taskrun] [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] ]
[/SD startdate] [/ED enddate] [/ENABLE | /DISABLE] [/IT] [/Z] }
更改要运行的程序,或计划任务使用的用户帐户和密码。
指定要连接的远程系统。
指定应在其中执行 schtasks.exe
的用户上下文。
[password]
指定给定用户上下文的密码。
如果省略则提示输入。
指定要更改的计划任务。
更改必须在其中执行计划任务的
用户名(用户上下文)。对于系统帐户,
有效值为 ""、"NT AUTHORITY\SYSTEM" 或 "SYSTEM"。
对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
"NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
对这三个也都可用。
为现有用户上下文指定新密码
或为新用户帐户指定密码。
对系统帐户忽略此密码。
指定计划任务将运行的
指定运行任务的开始时间。
时间格式为 HH:mm (24 小时时间),例如 14:30
表示 2:30 PM。
用分钟指定
重复间隔。有效范围: 1 - 599940 分钟。
指定运行任务的结束时间。
时间格式为 HH:mm (24 小时时间),例如 14:50
表示 2:50 PM。
指定运行任务的持续时间。
时间格式为 HH:mm。这不适用于 /ET。
在结束时间或持续时间终止任务。
指定运行任务的第一个日期。
格式为 yyyy/mm/dd。
指定任务应该运行的最后一个日期。
格式为 yyyy/mm/dd。
仅有在 /RU 用户当前已登录且
作业正在运行时才可以交互式运行任务。
此任务只有在用户已登录的情况下才运行。
设置作业的运行级别。有效值为
LIMITED 和 HIGHEST。默认情况下是不对其进行更改。
启用计划任务。
禁用计划任务。
标记在最终运行完任务后删除任务。
指定触发触发器后延迟任务运行的
等待时间。时间格式为
mmmm:ss。此选项仅对计划类型
ONSTART、ONLOGON 和 ONEVENT 有效。
显示此帮助消息。
SCHTASKS /Change /RP password /TN "备份和还原"
SCHTASKS /Change /TR restore.exe /TN "启动还原"
SCHTASKS /Change /S system /U user /P password /RU newuser
/TN "Start Backup" /IT
-------------------------
《SCHTASKS /ShowSid》命令。
SCHTASKS /ShowSid /TN taskname
向任务的专用用户显示 SID。
指定计划的任务名称。名称中不允许有短划线。
显示此帮助消息。
SCHTASKS /ShowSid /?
SCHTASKS /ShowSid /TN "\Microsoft\Windows\RAC\RACTask"
---------------------------
《schtasks》命令与执行开关.
阅读(...) 评论()

我要回帖

更多关于 信托公司监管评级办法 的文章

 

随机推荐