c# asp.net .net c#-4.0 asp.net-4.0

c# - ¿Cómo accedo a HttpContext.Current en Task.Factory.StartNew?



asp.net .net (3)

Como señaló David , HttpContext.Current no funcionará todo el tiempo. En mi caso, aproximadamente 1 de 20 veces, CurrentContext será nulo. Terminar con abajo.

string UserName = Context.User.Identity.Name; System.Threading.Tasks.Task.Factory.StartNew(() => { UserName ... }

Quiero acceder a HttpContext.Current en mi aplicación asp.net dentro de

Task.Factory.Start(() =>{ //HttpContext.Current is null here });

¿Cómo puedo solucionar este error?


Puede usar un cierre para tenerlo disponible en el subproceso recién creado:

var currentContext = HttpContext.Current; Task.Factory.Start(() => { // currentContext is not null here });

Pero tenga en cuenta que una tarea puede superar la vida útil de la solicitud HTTP y podría generar resultados divertidos al acceder a HTTPContext después de que la solicitud haya finalizado.


Task.Factory.Start lanzará un nuevo Thread y debido a que HttpContext.Context es local a un thread, no se copiará automáticamente al Thread nuevo, por lo que debe pasarlo a mano:

var task = Task.Factory.StartNew( state => { var context = (HttpContext) state; //use context }, HttpContext.Current);