CallContext vs ThreadStatic

¿Cuáles son las diferencias entre CallContext y ThreadStatic?

Entendí que en un entorno ASP.NET, los datos almacenados en CallContext podrían persistir durante toda la solicitud hasta que finalice, mientras que ThreadStatic puede funcionar o no, ya que la solicitud puede cambiar de tema. También aprendí que el HttpContext se almacena internamente usando CallContext.

En una aplicación regular, ambos parecen persistir durante la misma llamada de subproceso. ¿Cuándo no es este el caso?


Editar: en los comentarios aprendí que el contexto de llamada es una abstracción sobre un almacén estático de subprocesos. El marco de ASP.NET mueve explícitamente los datos de un hilo al siguiente que es para manejar una solicitud. Otro marco que quiera proporcionar agilidad de hilo podría hacer lo mismo para el almacenamiento contextual.

Muy a menudo, una solicitud utilizará el mismo hilo en todas partes, pero ciertamente no siempre será el caso: ASP.NET exhibe agilidad de hilo . Hay una discusión realmente útil sobre esto en los foros de Spring.NET . Esto se refiere a un artículo de blog detallado sobre el asunto . Sospecho que eso entra en más detalles de los que obtendrás aquí 🙂

¿Qué información conflictiva vio, por interés?

Los elementos almacenados como ThreadStatic están disponibles para más de una solicitud. IIS reutiliza el hilo después de completar una solicitud para procesar solicitudes posteriores, incluso puede intercambiar una solicitud de un hilo a otro durante el proceso. ASP.Net borra el CallContext después de cada solicitud.