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.

以上是HttpContext在后台线程中丢失的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>