asp.net-core - .net core HttpContext null inside async Task.Run

标签 asp.net-core asynchronous async-await httpcontext

我正在使用 .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/

相关文章:

c# - ASP.NET 核心 3.1 : does ConfigureAppConfiguration interacts with launchSettings. json?

c# - 调试器不会因异步方法中的异常而中断/停止

c# - 我可以使用 async/await 来模拟后台 worker 吗?

c# - 我想处理 System.Threading.Tasks.Task.Factory.StartNew(); 中的异常

c++ - OpenCL:返回 std::future 而不是使用 clFinish 进行阻塞

javascript - 使用Async/Await正确尝试…捕获语法

c# - 异步获取模型上的 Razor Pages 为空

c# - 使用 C# 仅获取 JSON 的一部分

asp.net-mvc - 将 javascript 文件存储在与 ASP.NET Core 1.1 中的 View 相同的文件夹中?

objective-c - AFNetworking 异步数据获取