咱们在一个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,由于处理他们的线程不是当前线程(为处理请求产生线程)请求