Do ASP.NET Requests always BeginRequest and EndRequest on the same thread?

后端 未结 3 1267
暖寄归人
暖寄归人 2021-01-14 09:48

Does BeginRequest and EndRequest for an ASP.NET HttpApplication always occur on the exact same thread for a given HTTP request from a client?

The reason I ask is tha

相关标签:
3条回答
  • 2021-01-14 10:12

    The funny thing is I've made this mistake before, so I should know better...but alas.

    ThreadStatic members need to be STATIC. It really should throw a compiler error if it's not...

    0 讨论(0)
  • 2021-01-14 10:15

    No, as per Richard's answer.

    As an aside, you're supposed to "share" variables between HTTP Modules via HttpContext.Current.Items. In the case of [ThreadStatic], due to thread agility in ASP.NET it's not guaranteed that your code will start and finish on the same thread. So, ThreadStatic isn't such a great idea in ASP.NET.

    It's worth saying that EndRequest will always execute with the same HttpContext.

    This seems to be the definitive post on using [ThreadStatic] verses HttpContext http://piers7.blogspot.co.nz/2005/11/threadstatic-callcontext-and_02.html

    Scott Hanselman also posted on the subject:
    http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx

    And Jon Skeet has a good SO answer here too:
    CallContext vs ThreadStatic

    0 讨论(0)
  • 2021-01-14 10:23

    Does BeginRequest and EndRequest for an ASP .NET HttpApplication always occur on the exact same thread for a given HTTP request from a client?

    No. There are options to perform asynchronous operations in the request leading to the end of the request being handled on a different thread. This is not the normal case.

    See the Async attribute of @Page directive: http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

    For an introduction to using asynchronous pages, see this MSDN Magazine article: "Asynchronous Pages in ASP.NET 2.0".

    0 讨论(0)
提交回复
热议问题