tengo una clase estática con una propiedad get estática, y en este inmueble, hago esto:C#: Adición de contexto a Parallel.ForEach() en ASP.NET
// property body
{
// HttpContext.Current is NOT null
...
Parallel.ForEach(files, file =>
{
// HttpContext.Current is null
var promo = new Promotion();
...
});
...
// HttpContext.Current is NOT null
}
Esta clase estática no lo hace experimentado inicialización de tipo hasta que una vista use esta propiedad.
El problema es que el constructor estático Promotion
's, que se inicializa la primera vez que un new Promotion()
se crea dentro del Parallel.ForEach()
, utiliza HttpContext.Current
. Cuando se crea una instancia de promo
dentro del alcance de este Parallel.ForEach()
, HttpContext.Current
es null
y new Promotion()
por lo tanto, se produce una excepción.
HttpContext.Current
no es nulo dentro de la propiedad de obtención estática porque no se llama hasta que la vista lo usa (y por lo tanto hay un HttpContext.Current
).
Si Promotion
utiliza HttpContext.Current
en sus instancias, en vez de sus miembros estáticos, probablemente podría pasar sólo HttpContext.Current
en el new Promotion()
constructor:
var context = HttpContext.Current;
Parallel.ForEach(files, file =>
{
var promo = new Promotion(context);
});
Pero desde static
miembros de Promoción necesitan HttpContext.Current, no puedo . Probablemente podría rediseñar la clase Promotion
para cambiar los miembros estáticos que lo necesitan para ser miembros de instancia, pero son estáticos por una razón: habría una gran penalización de rendimiento si todos los miembros que estaban estáticos debieran definirse en su lugar en cada instancia cada vez que se creó una instancia de new Promotion
.
¿Cuáles son las posibles soluciones para esto? No me di cuenta HttpContext.Current
sería nulo dentro del alcance de Parallel.ForEach()
.
miembros estáticos de Promoción se inicializarán solo una vez, cuando se toque el código de la clase ... ¿Cómo podrían depender de 'HttpContext.Current'? –
¿Está bajo su control el código fuente de 'Promoción'? –