HttpModules和竞争条件

时间:2015-03-27 19:30:49

标签: asp.net

以下是我正在处理的HttpModule的完整源代码。 如您所见,我记录 BeginRequest 事件期间的时间,将其存储在私有字段中,并计算 EndRequest 事件期间的已用时间。

我可以安全地假设在EndRequest事件触发之前,_RequestStart字段不会被另一个请求覆盖吗? asp.net是否使用此HttpModule的相同实例来为多个同时请求提供服务?

   public class TimingModule : IHttpModule 
   {
       private DateTime _RequestStart;

       public void Dispose() {}

       public void Init(HttpApplication context)
       {
           context.BeginRequest += new EventHandler(OnBeginRequest);
           context.EndRequest += new EventHandler(OnEndRequest);
       }

       private void OnEndRequest(object sender, EventArgs e)
       {
           HttpApplication app = sender as HttpApplication;

           if (app.Context.Response.BufferOutput)
           {

               TimeSpan ts = DateTime.Now.Subtract(_RequestStart);
               app.Context.Response.AddHeader("X-ServerTiming",ts.TotalMilliseconds.ToString());
           }
       }

       private void OnBeginRequest(object sender, EventArgs e)
       {

           _RequestStart = DateTime.Now;
       }
   }

0 个答案:

没有答案