HttpContext在后台线程中丢失
c#
我有一个异步方法,它使用 HttpContext.Current,它由另一个在后台运行的代码使用,例如
var result = Task.Run(async () => await SomeMethod()).Result;
HttpContext.Current 始终为 null。有没有办法将 HttpContext 传递给后台任务?
回答
有没有办法将 HttpContext 传递给后台任务?
从技术上讲是的,您可以设置HttpContext.Current. 但是,你真的不希望这样做。HttpContext旨在一次仅由一个线程使用。
更好的解决方案是Task.Run完全删除:
await SomeMethod();
Task.Run首先不应该在 ASP.NET 上使用。
它看起来像代码可以尝试使用Task.Run做了“射后不理”,在这种情况下Task.Run是非常危险的和不完整的“解决方案”。“即发即忘”的正确解决方案是异步消息传递,即具有单独后台服务的持久队列。
- @user2820173: Then you should go sync all the way.