您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

Community Server专题七: Job & Timer

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-1-30 我要参与讨论

     if(Enabled)

        _timer.Change( Interval, Interval);

    else

        this.Dispose();

}

通过_timer = new Timer(new TimerCallback(timer_Callback), id,Interval, Interval);

先实例化了一个定时器,并制定了该定时器触发时候调用的方法是timer_Callback。

(前一个Interval指:

后一个Interval指:

)

在回调方法timer_Callback只要调用的是ExecuteJob()方法,该方法通过调用Job类的Jobs类中传递过来得xml节点信息,使用反射实例化一个具有IJob接口的类(IJob接口要求实现它的类都具有Execute方法),并且执行类中的Execute方法。我们分析一个实现了IJob的类,打开Components文件夹下的EmailJob.cs,该类中只有一个方法,就是Execute,该方法又调用Emails.cs下的SendQueuedEmails方法,主要用途是发送数据库队列中的Email(这里Email来源于用户注册时需要发送的注册成功的信息等等,通常的做法是在用户注册完毕后马上就发送Email,而CS采用的是将要发送的Email存入数据库,在一定的间隔时间后统一处理这段时间内的所有Email发送,处理的类就是EmailJob.cs)。这里还要注意一点:TimerCallback的实例不在创建计时器的线程中执行,而是在系统提供的一个单独线程池线程中执行。

再来看看CommunityServerComponents项目下的Jobs.cs文件,这个类第一次看设计的有点蹩脚,它的构造函数是静态的,但是在静态的构造函数中实例化它自己,实例化后保存在static readonly的变量里(晕了吧,嘿嘿!)其实这叫单件模式(Singleton模式),确保全局中有且只有一个Jobs实例。Jobs的实例主要完成从CS的配置文件中读取出每个Job的配置信息,先看一下Job的配置信息:

<Jobs minutes = "5" singleThread = "false">

         <job name = "SiteStatisticsUpdates" type = "CommunityServer.Components.SiteStatisticsJob, CommunityServer.Components" enabled = "true" enableShutDown = "false" />

         <job name = "ForumsIndexing" type = "CommunitySe

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

在google里搜索更多Community Server专题七: Job & Timer

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明