는 내가이 오류를 해결할 수있는 방법Task.Factory.StartNew에서 HttpContext.Current에 액세스하려면 어떻게해야합니까?
Task.Factory.Start(() =>{
//HttpContext.Current is null here
});
내에서 내 asp.net 응용 프로그램에서 HttpContext.Current에 액세스하려면?
는 내가이 오류를 해결할 수있는 방법Task.Factory.StartNew에서 HttpContext.Current에 액세스하려면 어떻게해야합니까?
Task.Factory.Start(() =>{
//HttpContext.Current is null here
});
내에서 내 asp.net 응용 프로그램에서 HttpContext.Current에 액세스하려면?
Task.Factory.Start
새로운 Thread
을 해고하고 손으로 전달해야하므로 HttpContext.Context
때문에,이를 automaticly 새로운 Thread
에 복사되지 않습니다 스레드에 로컬됩니다
var task = Task.Factory.StartNew(
state =>
{
var context = (HttpContext) state;
//use context
},
HttpContext.Current);
당신은 수를 작업은 HTTP 요청의 수명을 오래 살 수 있고, HTT에 액세스 할 때 재미있는 결과가 발생할 수
var currentContext = HttpContext.Current;
Task.Factory.Start(() => {
// currentContext is not null here
});
하지만 명심 : 새로 만든 스레드에 사용할 가지고 클로저를 사용 요청이 완료된 후 PContext.
을 참조하십시오. 상태 객체를 전달하고 개별 변수로 항목을 캐스팅하는 대신이 방법을 사용하는 것이 좋습니다. 지저분합니다. –
David으로 지적했듯이 HttpContext.Current는 항상 작동하지 않습니다. 내 경우에는 약 20 시간 중 하나, CurrentContext null이됩니다. 아래로 끝내십시오.
string UserName = Context.User.Identity.Name;
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
UserName ...
}
흥미롭게도 저에게는 이상합니다. 예를 들어, HttpContext의 사용자 속성은 HttpContext.Current에 값을 가지고 있지만 스레드를 입력 한 후 null이됩니다. – Giedrius
예, HttpContext.Current에 대한 참조를 사용하면 시간이 많이 걸릴 수는 있지만 권장하지 않으며 때때로 실패 할 가능성이 있습니다. ASP 런타임은 http 요청이 완료되면 객체를 정리할 수 있습니다. 그런 다음'context.Items [x]'에 이전에 넣은 것을 포함하지 않습니다. 또한 http://stackoverflow.com/questions/8925227/access-httpcontext-current-from-threads – Rory