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);