咱們在一個ASP.NET程序中,爲何能夠處處訪問HttpContext.Current呢?
由於ASP.NET會爲每一個請求分配一個線程(也是當前線程),這個線程會執行咱們的代碼來生成響應結果, 即便咱們的代碼散落在不一樣的地方(類庫),線程仍然會執行它們, 因此咱們能夠在任何地方訪問System.Web.HttpContext.Current獲取到與當前請求相關的HttpContext對象, 這些代碼是由同一個線程來執行,因此獲得的HttpContext引用也就是咱們期待的那個與請求相關的對象。異步
當前線程是什麼意思?
個人理解是:
1. 當前線程是指與當前請求相關的線程。
2. 在ASP.NET程序中,有些線程並不是老是與請求相關。線程
雖然在ASP.NET程序中,幾乎全部的線程都應該是爲響應請求而運行的,可是還有一些線程卻不是爲了響應請求而(產生)運行的,對象
例如:
1. 定時器的回調。
2. Cache的移除通知。
3. APM模式下異步完成回調。
4. 主動建立線程或者將任務交給線程池來執行。線程池
5.異步任務Task定時器
至於什麼APM網上資料不少,這裏我就不說明了引用
在這些狀況下使用System.Web.HttpContext.Current獲取HttpContext對象獲得的結果都是null,由於處理他們的線程不是當前線程(爲處理請求產生線程)請求