HttpContext 在后台线程中丢失

use*_*173 0 c# asp.net httpcontext task-parallel-library async-await

我有一个异步方法,它使用 HttpContext.Current,它由另一个在后台运行的代码使用,例如

var result = Task.Run(async () => await SomeMethod()).Result;
Run Code Online (Sandbox Code Playgroud)

HttpContext.Current 始终为 null。有没有办法将 HttpContext 传递给后台任务?

Ste*_*ary 5

有没有办法将 HttpContext 传递给后台任务?

从技术上讲是的,您可以设置HttpContext.Current. 但是,你真的希望这样做。HttpContext旨在一次仅由一个线程使用。

更好的解决方案是Task.Run完全删除:

await SomeMethod();
Run Code Online (Sandbox Code Playgroud)

Task.Run首先不应该在 ASP.NET 上使用

看起来像代码可以尝试使用Task.Run做了“射后不理”,在这种情况下Task.Run是非常危险的和不完整的“解决方案”。“即发即忘”的正确解决方案是异步消息传递,即具有单独后台服务的持久队列。

  • @user2820173:那么你应该一直同步。 (2认同)