C#-CallContext与ThreadStati

CallContext和ThreadStatic有什么区别?

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

在常规应用程序中,它们似乎都在同一线程调用中保持不变。 什么时候不是这种情况?


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

Cristian Libardo asked 2020-01-24T10:54:13Z
2个解决方案
34 votes

一个请求通常会在整个过程中使用相同的线程,但是,情况并非总是如此-ASP.NET具有线程敏捷性。 有一篇关于2005年该问题的深入博客文章,但是从.NET 4.5开始,情况要好得多。

Jon Skeet answered 2020-01-24T10:54:33Z
14 votes

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

Martin Brown answered 2020-01-24T10:54:53Z
translate from https://stackoverflow.com:/questions/273301/callcontext-vs-threadstatic