我有一个代码示例,它用于ASP.NET MVC应用程序。 这段代码的目的是创建“fire and forget”请求以排队一些长时间运行的操作。
public JsonResult SomeAction() {
HttpContext ctx = HttpContext.Current;
Task.Run(() => {
HttpContext.Current = ctx;
//Other long running code here.
});
return Json("{ 'status': 'Work Queued' }");
}
我知道这不是在异步代码中处理HttpContext.Current的好方法,但目前我们的实现不允许我们做其他事情。我想了解一下这段代码到底有多危险...
问题: 在Task.Run内设置HttpContext是否理论上可能会将上下文设置为完全不同的请求?
我认为是可能的,但我不确定。我的理解是: 请求1由线程池中的Thread1处理,然后在Thread1处理完另一个请求(请求2)之后,Task.Run内的代码将上下文从请求1设置为请求2。
也许我错了,但是我对ASP.NET内部的了解不足以正确理解它。
谢谢!