【发布时间】:2021-09-16 11:53:06
【问题描述】:
来自 Stephen Cleary 的this 回答,我了解到HttpContext 与SynchronizationContext 一起流动。因此,给定以下代码:
public async Task<ActionResult> Index()
{
var outerContext = System.Web.HttpContext.Current = new HttpContext(
new HttpRequest(null, "http://test.com", null),
new HttpResponse(new StreamWriter("C:/Path")));
Console.WriteLine(outerContext.Equals(System.Web.HttpContext.Current));
await Task.Run(
delegate
{
Console.WriteLine(outerContext.Equals(System.Web.HttpContext.Current));
});
Console.WriteLine(outerContext.Equals(System.Web.HttpContext.Current));
return View();
}
我希望控制台输出是:
True
False
True
然而,实际的输出是:
True
False
False
调试后,似乎延续中的上下文设置为请求的原始上下文,即在我通过调用HttpContext.Current = ... 手动设置之前的上下文。这是什么原因?在执行await 之后的代码之前,它是否被设置为请求上下文?
【问题讨论】:
标签: asp.net httpcontext synchronizationcontext