David Fowler 和 Damian Edwards 最近在 NDC London 发表了关于调试 asp.net core 2.0 的演讲。
在那次演讲中,他们警告控制器操作方法会执行异步操作,然后尝试访问IHttpContextAccessor,基本上它不是线程安全的。
我想知道这是否仅适用于操作方法,以及在异步操作过滤器中执行此操作是否安全(我在每个请求上都有类似的内容):
public class SampleAttribute : IAsyncActionFilter
{
private readonly IHttpContextAccessor _httpContextAccessor;
public LoggedInUserAttribute(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public async Task OnActionExecutionAsync(ActionExecutingContext filterContext, ActionExecutionDelegate next)
{
// Do something IO-bound more useful than...
await Task.Delay(1000);
// Then set something on the IHttpContextAccessor...
_httpContextAccessor.HttpContext.Items["Something"] = "Hello";
await next();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是关于从多个线程并行访问 HttpContext 。演讲中的示例描述了由于 IHttpContextAccessor,有时很难判断是什么在访问 HttpContext。您上面的代码工作正常,一个线程一次访问 HttpContext (尽管您在过滤器中永远不需要它,因为 MVC 通过适当的过滤器上下文将它提供给您)。
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |