内のasp.netアプリケーションでHttpContext.Currentにアクセスしたい
Task.Factory.Start(() =>{
//HttpContext.Current is null here
});
このエラーを修正するにはどうすればよいですか?
内のasp.netアプリケーションでHttpContext.Currentにアクセスしたい
Task.Factory.Start(() =>{
//HttpContext.Current is null here
});
このエラーを修正するにはどうすればよいですか?
Task.Factory.Start
は新しいスレッドを起動し、はスレッドに対してローカルThread
であるため、新しいHttpContext.Context
スレッドに自動的にコピーされないためThread
、手動で渡す必要があります。
var task = Task.Factory.StartNew(
state =>
{
var context = (HttpContext) state;
//use context
},
HttpContext.Current);
クロージャーを使用して、新しく作成されたスレッドで使用できるようにすることができます。
var currentContext = HttpContext.Current;
Task.Factory.Start(() => {
// currentContext is not null here
});
ただし、タスクはHTTPリクエストの存続期間を超えて存続する可能性があり、リクエストの完了後にHTTPContextにアクセスするとおかしな結果につながる可能性があることに注意してください。
Davidが指摘したように、HttpContext.Currentは常に機能するとは限りません。私の場合、20回のうち約1回、CurrentContextはnullになります。以下で終わります。
string UserName = Context.User.Identity.Name;
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
UserName ...
}