释放完资源后(无论有没有CS都会这么做),接着就会实例化每个实现了IJob的类,根据上述的配置文件定义一个Timer或者让每个Job都定义一个自己的Timer(这就相当于给钟点工统一一个工作时间或者给每个钟点工都规定一个工作时间,规定完后该干什么的就干去吧,只要时间到了就得干活)。再往下,就自己分析吧,也就没有什么难题了…
不知道为什么我的团队中的几个成员老是不能理解这个执行过程,我解释了半天,最后发现了问题:
回到CSHttpModule.cs文件中来,这是一个实现了IHttpModule接口的类,实现该接口的类都要有一个Init方法,我们看到,所有的Job开始初始化的起点也是从这个方法中调用的。但是我的小组成员都认为每个Http请求都会调用一次Init方法,
public void Init(HttpApplication application)
{
// Wire-up application events
//
application.BeginRequest += new EventHandler(this.Application_BeginRequest);
application.AuthenticateRequest += new EventHandler(Application_AuthenticateRequest);
application.Error += new EventHandler(this.Application_OnError);
application.AuthorizeRequest += new EventHandler(this.Application_AuthorizeRequest);
//settingsID = SiteSettingsManager.GetSiteSettings(application.Context).SettingsID;
Jobs.Instance().Start();
//CSException ex = new CSException(CSExceptionType.ApplicationStart, "Appication Started " + AppDomain.CurrentDomain.FriendlyName);
//ex.Log();
}
也就是说每个请求都实例化一个CSHttpModule,如果是这样Init方法就会多次被调用,那么如果有1000个Http请求Jobs就会Start 1000次,这本来就分析不通。
其实认为CSHttpModule会被实例化多次就是
| 对此文章发表了评论 |

