2008-11-07 6 views
46

¿Qué diferencias hay entre CallContext y ThreadStatic?CallContext vs ThreadStatic

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

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


Editar: En los comentarios que he aprendido que el contexto de la llamada es una abstracción sobre una tienda estática hilo. 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.

Respuesta

30

Muy a menudo una solicitud utilizará el mismo hilo conductor, pero ciertamente no siempre será el caso - ASP.NET exhibe la agilidad hilo. Hay una discusión muy útil sobre esto en el Spring.NET forums. Esto se refiere a un in-depth blog article about the matter. Sospecho que eso entra en más detalles de los que obtendrá aquí :)

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

+0

Ese hilo de spring.net estaba en la parte posterior de mi cabeza cuando pregunté (puntos para enlazar). Estaba buscando detalles relacionados con el caso que no es web. ¿Son esencialmente lo mismo? –

+0

¿Qué quiere decir con el caso no web? Realmente depende de lo que estés haciendo: si sabes que estás en un único hilo, está bien usar ThreadStatic. –

+0

Me refiero a una aplicación no afectada por las abstracciones de ASP.NET. CallContext y ThreadStatic parecen funcionar de la misma manera, es decir, parecen tener la misma duración. Estoy interesado en aprender las diferencias entre los dos. –

12

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.

+3

Sin embargo, es más que eso: una solicitud puede atravesar hilos, por lo que lo que pone en un ThreadStatic en una fase no estará disponible en uno diferente . –

+1

¿Cuál es el mecanismo que mantiene el contexto de llamada entre hilos que sirven la misma solicitud? –

+3

Manejo de agilidad de hilos de ASP.NET, básicamente. Sospecho que es un ThreadStatic internamente, y cuando un hilo deja de atender una solicitud por el motivo que sea, ASP.NET mantiene la solicitud y el contexto juntos, luego lo restablece en cualquier hilo que recoja el trabajo. –

Cuestiones relacionadas