项目中使用System.Threading.Timer对象时IIS释放Timer对象的问题

之前的一个项目中使用System.Threading.Timer对象时有没有遇到IIS释放Timer对象的问 题。说实话之前真没遇到过这个问题,就是说我之前定义的timer对象没有释放,运行正常, 回来后我就百度寻找这方面得信息,原来IIS在运行WebApp时对于非静态资源都是自动释放, 而我回头看了看之前写的Web程序,很幸运当时是这么写的:

Global.asax文件

private static Timer time; //System.Threading;
private static Log log;
protected void Application_Start(object sender, EventArgs e)
{
    log = new Log();
    log.Write(ref time, 5000);
}

Log.cs内代码:

class Log{
        public void Write(ref Timer time,int flashTime)
        {
            if (time == null) {
                time = new Timer(new TimerCallback(DoExecution), this, 0, 

flashTime);
            }
        }
        void DoExecution(object obj)
        {
            //定时执行代码
        }
}

也就是说把timer对象定义成全局静态对象就不会被IIS所释放,如果当时不这么 写,肯定会在出错时郁闷好一阵。不过现在知识面广了,定时执行任务可以使用Quartz.net 开源组件,他封装了Time对象,可以使任务的执行更稳定,下面给出示例代码:

public class TimeJob:Quartz.IJob {
    public void Execute(Quartz.JobExecutionContext context)
    {
        //需要定时执行的代码。。。
    }
}
public class Global : System.Web.HttpApplication
{
    private static Timer time ;
    protected void Application_Start(object sender, EventArgs e)
    {
        //定义任务
        Quartz.JobDetail job = new Quartz.JobDetail("job1", "group1", typeof

(TimeJob));
        //定义触发器
        Quartz.Trigger trigger = Quartz.TriggerUtils.MakeSecondlyTrigger(5);//5秒

执行
        trigger.Name = "trigger1";
        trigger.JobGroup = "group1";
        trigger.JobName = "job1";
        trigger.Group = "group1";
        //定义计划着
        Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
        Quartz.IScheduler sch = sf.GetScheduler();
        sch.AddJob(job, true);//添加任务
        sch.ScheduleJob(trigger);//添加计划者
        sch.Start();//开始执行
    }
}

以上代码也是在Global.asax文件中定义的。

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/aspx/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, quartz
, time
, 代码
, trigger
, thread 方面的问题
, timer
, quartz 定时器
, threading timer
, quartz定时任务
, quartz 定时任务
, quartz.net
, Threading.Timer
定时器quartz.net
threading.timer、c threading.timer、threading.timer 停止、threading.timer 参数、threading.timer用法,以便于您获取更多的相关知识。

时间: 2024-10-30 12:39:22

项目中使用System.Threading.Timer对象时IIS释放Timer对象的问题的相关文章

vue项目中做编辑功能传递数据时遇到问题的解决方法_javascript技巧

在项目中完成编辑功能时,遇到了这样一个问题:编辑的功能使用的是一个子组件作为弹出框,如图 这里涉及到从父组件向子组件传递数据的问题,这个项目使用的是v1.0,问题是当点击了编辑以后,弹出的子组件中没有获取到父组件传过来的数据,检查后没有发现代码错误,最后解决的方法就是在父组件中,把传递的数据中的每一项都初始化了一遍就好了 creatIssue (type,list,id){ this.modelIssue=true; this.modeltype=type; if(type=='creat'){

项目中使用了ibatis、hibernate时,怎么来控制事务

问题描述 现在的项目中使用了ibatis.hibernate然后在spring的配置文件里面配置<beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean><be

timer-关于System.Threading.Timer

问题描述 关于System.Threading.Timer MSDN上的例子: using System; using System.Threading; public class Example { private static Timer ticker; public static void TimerMethod(object state) { Console.Write("."); } public static void Main() { ticker = new Timer

reboot-android在jni中调用system()函数

问题描述 android在jni中调用system()函数 想在android程序中实现设备的重启. android在jni(c++写的)中调用system("reboot"),但是调试时,程序执行到此无任何反应,并继续执行了下面的代码.也试过了其他方法,如:android_reboot(ANDROID_RB_RESTART,0,0); 仍然无法实现重启. 想问各位有什么好办法解决吗? 解决方案 题主可以参考源码中 关机键按下时所执行的代码,印象中是一个叫做shutdownThread

pringm-MyBatis中serviceImpl的实现层如何向Sql语句传送对象

问题描述 MyBatis中serviceImpl的实现层如何向Sql语句传送对象 公司项目用的SpringMVC+mybatis 自定义查询语句,需要获取三个参数如何传送到xml的sql语句中 解决方案 xml 定义parameterType="map" ,sql语句例如:select * from user where ID=#{id} and NAME = #{name} and AGE = #{age} 在serviceImp中 Map map = new HashMap();

java项目中对象第二次创建时,第一个对象为什么还存在

问题描述 java项目中对象第二次创建时,第一个对象为什么还存在 可能我问题提的不太清楚,我举个例子 比如一个类 public class A{ private List list = new ArrayList(); public void add(){ list.add("abv"); } public void tell(){ System.out.print(list.size()); } } 在其他地方调用 A a = new A(); a.add(); Thread.sle

在java项目中的mongodb的_id被fastjson转为json时竟然丢失了

fastjson是阿里开发的一个javaBean和json解析器和封装器(源码位置),用过几次感觉挺好用的,也是国人的开源项目当然得支持,但最近项目在使用mongodb作为数据库时出现了_id丢失的问题,现将我遇到的问题和解决办法展示一下. 现将错误的程序代码添加上,然后再提供解决方法: package org.jivesoftware.openfire.plugin.friends.test; import org.bson.types.ObjectId; import org.jivesof

注解:System.Threading.Timer

   System.Threading.Timer 是一个非常常用的定时器类,关于这个类的使用,我们需要注意以下几点:    1.System.Threading.Timer 的任何一个实例,实际上是通过使用win32底层(非.NET Thread Pool中的线程)来进行调度的.    2.当到达调度时刻时,System.Threading.Timer 将异步调用由TimerCallback参数指定的回调方法.也就是说TimerCallback所指向的方法将在.NET Thread Pool中

java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法

问题描述 java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法 创建子类对象时,Student s = new Student(""school""); 该构造方法中没有显示调用父类的构造方法,但还是编译成功了,该构造方法调用自身的构造函数,此构造函数中有调用父类的构造方法,执行成功的原因是什么 解决方案 不用显示调用,会自动执行父类的构造 解决方案二: 子类的构造方法中,如果没有显示调用父类的构造方法,会默认调用父类无参的构造方法.类似于