CallContext与ThreadStatic

CallContext和ThreadStatic之间有什么区别?

我已经理解,在ASP.NET环境中,存储在CallContext中的数据可以在整个请求中保存,直到ThreadStatic结束,否则请求可能会切换线程。 我也了解到,HttpContext是使用CallContext在内部存储的。

在一个普通的应用程序中,它们似乎都在同一个线程调用中持续存在。 何时不是这种情况?


编辑:在评论中我了解到,调用上下文是对线程静态存储的抽象。 ASP.NET框架明确地将数据从一个线程移动到下一个处理一个请求的地方。 其他想要提供线程灵活性的框架可以为上下文存储做同样的工作。

很多时候一个请求会使用同一个线程,但事实并非总是如此 – ASP.NET展现了线程敏捷性 。 在Spring.NET论坛上有一个非常有用的讨论。 这是关于这个问题的一篇深入的博客文章 。 我怀疑这会比你会在这里得到更多的细节:)

你看到什么相冲突的信息,出于兴趣?

存储为ThreadStatic的项目可用于多个请求。 请求完成后,IIS重用线程来处理后续请求,甚至可以在处理期间将请求从一个线程交换到另一个线程。 每个请求后,ASP.Net清除CallContext。