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,即具有独立后台服务的持久队列。
我有一个异步方法,它使用 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,即具有独立后台服务的持久队列。