CallContext与ThreadStatic

时间:2008-11-07 19:26:11

标签: c# asp.net

CallContext和ThreadStatic之间有什么区别?

我已经了解到,在ASP.NET环境中,存储在CallContext中的数据可以在整个请求中保留,直到它结束,而ThreadStatic可能会或可能不会工作,因为请求可能会切换线程。我还了解到HttpContext是使用CallContext在内部存储的。

在常规应用程序中,它们似乎都在同一个线程调用中持续存在。什么时候不是这样的?


编辑:在评论中我了解到调用上下文是线程静态存储的抽象。 ASP.NET框架显式地将数据从一个线程移动到下一个处理一个请求的线程。其他想要提供线程敏捷性的框架可以对上下文存储做同样的事情。

2 个答案:

答案 0 :(得分:33)

请求通常会使用相同的线程,但事实并非总是如此 - ASP.NET展示了线程敏捷性。在Spring.NET forums上有一个非常有用的讨论。这指的是in-depth blog article about the matter。我怀疑这会得到更多细节,而不是你会到达这里:)

您感兴趣的是什么相互矛盾的信息?

答案 1 :(得分:13)

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