我們在一個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,因為處理他們的線程不是當前線程(為處理請求產生線程)