HttpContext 在后台线程中丢失

HttpContext is lost in background thread

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

var result = Task.Run(async () => await SomeMethod()).Result;

HttpContext.Current 虽然总是空的。 有没有办法将 HttpContext 传递到后台任务?

Is there a way to pass HttpContext into background task?

技术上是的,你可以设置HttpContext.Current。但是,您确实不想这样做。 HttpContext 一次仅供一个线程使用。

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

await SomeMethod();

Task.Run shouldn't be used on ASP.NET in the first place.

看起来 代码可能正在尝试使用 Task.Run 进行“即发即弃”,在这种情况下 Task.Run 是一个非常危险且不完整的“解决方案”。 “即发即弃”的正确解决方案是 asynchronous messaging,即具有独立后台服务的持久队列。