HttpContext.Current.Session為null


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM