我正在使用 .net core 3.1 api 项目,我想访问我的 Task.Run block 内的 HttpContext 。这是我的代码:
// before Task.Run my HttpContextAccessor.HttpContext has correct values
Task.Run(async () =>
{
//any other method with await here
var data = await SomeMethod(config); // in that method HttpContextAccessor.HttpContext is null
}, cancellationToken)
在 ASP.NET 中,我可以使用FriendlySynchronizationContext 来处理它,但在 .NET Core 中没有同步上下文。
有人可以为我提供解决方案/解释如何解决该问题吗?
最佳答案
来自documentation :
HttpContext isn't thread-safe. Reading or writing properties of the HttpContext outside of processing a request can result in a NullReferenceException.
捕获 HttpContext
或使用 IHttpContextAccessor
访问它可能会给您带来麻烦。
最佳实践是从请求中收集所需的任何信息,对其进行处理并使用处理结果来生成响应。
此外,请求是在线程池线程上处理的,并且 Task.Run
调度工作在线程池线程上运行。这会导致使用额外的线程、额外的上下文切换和额外的线程池工作,但对应用程序没有真正的好处(恰恰相反)。
关于asp.net-core - .net core HttpContext null inside async Task.Run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68721498/