c# .net asp.net multithreading threadstatic

c# - ThreadStaticAttribute en ASP.NET



multithreading (2)

No estoy seguro de usar datos locales de subprocesos en el entorno ASP.NET, pero .NET 4.0 viene con la clase ThreadLocal .

Tengo un componente que necesita almacenar valores static cada hilo. Es un componente general que se puede usar en muchos escenarios y no solo en ASP.NET.

Estaba pensando en usar el atributo [ThreadStatic] para lograr mi objetivo. Suponiendo que también funcionaría bien en los escenarios de ASP.NET, porque asumí que todas las solicitudes se llaman en un hilo propio.

Después de algunas investigaciones, encontré esta publicación en el blog de Scott Hanselman que decía tener cuidado al usar [ThreadStatic] en ASP.NET.

Sin embargo, la mayoría de los comentarios (debajo de la Publicación) no están de acuerdo con lo que escribió Scott, diciendo que una Solicitud siempre se ejecuta en un hilo y que otra solicitud no usa el hilo al mismo tiempo. Eso es también lo que creo, pero me encantaría tener una opinión acerca de sus expertos aquí.


No, Scott tiene razón: una solicitud definitivamente no tiene que ejecutarse en un solo hilo durante toda su duración. ASP.NET es un hilo ágil en ese sentido. Hay solo unos pocos puntos donde el cambio puede ocurrir, pero definitivamente puede suceder. (Lo he probado por mi mismo.)

Si lo desea, puede leer esta publicación de blog y este hilo del foro de Spring para obtener más detalles.

Básicamente debes encontrar una forma diferente de capturar el contexto. El bit relevante desde su punto de vista probablemente se encuentre al final de la publicación del blog:

Este es un PITA importante, porque, por lo que puedo ver, significa que la única opción de persistencia para el comportamiento "ThreadStatic" en ASP.Net es usar HttpContext. Entonces, para los objetos de su negocio, o está atascado con el if (HttpContext.Current! = Null) y la referencia System.Web (yuck) o tiene que encontrar algún tipo de modelo de proveedor para su persistencia estática, que deberá configurarse antes de que se acceda a cualquiera de estos singletons. Doble asco