asp.net 定时间点执行任务的简易解决办法
程序员文章站
2024-03-08 15:24:28
比如每天凌晨七点的时候email发送一次报表。 这里首先想到的就是利用 global.asax 文件来实现, 以下global文件的内容。 复制代码 代码如下: <%...
比如每天凌晨七点的时候email发送一次报表。
这里首先想到的就是利用 global.asax 文件来实现, 以下global文件的内容。
<%@ application language="c#" %>
<%@ import namespace="system.threading" %>
<script runat="server">
//这里使用静态保持对这处timer实例的引用,以免gc
private static system.threading.timer timer = null;
protected void application_start(object sender, eventargs e) {
//计算现在到目标时间要过的时间段。
datetime lucktime = datetime.now.date.add(new timespan(7, 0, 0));
timespan span = lucktime - datetime.now;
if (span < timespan.zero) {
span = lucktime.adddays(1d) - datetime.now;
}
//按需传递的状态或者对象。
object state = new object();
//定义计时器
timer = new system.threading.timer(
new timercallback(certaintask), state,
span, timespan.fromticks(timespan.ticksperday));
}
protected void application_end(object sender, eventargs e) {
//结束时记得释放
if (timer != null) { timer.dispose(); }
}
//这里是指定时间执行的代码,必须是静态的。
private static void certaintask(object state) {
//这里写你的任务逻辑
}
</script>
这里首先想到的就是利用 global.asax 文件来实现, 以下global文件的内容。
复制代码 代码如下:
<%@ application language="c#" %>
<%@ import namespace="system.threading" %>
<script runat="server">
//这里使用静态保持对这处timer实例的引用,以免gc
private static system.threading.timer timer = null;
protected void application_start(object sender, eventargs e) {
//计算现在到目标时间要过的时间段。
datetime lucktime = datetime.now.date.add(new timespan(7, 0, 0));
timespan span = lucktime - datetime.now;
if (span < timespan.zero) {
span = lucktime.adddays(1d) - datetime.now;
}
//按需传递的状态或者对象。
object state = new object();
//定义计时器
timer = new system.threading.timer(
new timercallback(certaintask), state,
span, timespan.fromticks(timespan.ticksperday));
}
protected void application_end(object sender, eventargs e) {
//结束时记得释放
if (timer != null) { timer.dispose(); }
}
//这里是指定时间执行的代码,必须是静态的。
private static void certaintask(object state) {
//这里写你的任务逻辑
}
</script>