【发布时间】:2021-03-24 11:57:14
【问题描述】:
我有一个异步方法,它使用 HttpContext.Current,它被另一个在后台运行的代码使用,比如
var result = Task.Run(async () => await SomeMethod()).Result;
HttpContext.Current 始终为 null。 有没有办法将 HttpContext 传递给后台任务?
【问题讨论】:
-
听起来好像以前被引用过:stackoverflow.com/questions/8925227/…
-
最近的stackoverflow.com/questions/63413283/… ....根据答案有一种方法可以做到这一点,但这是不可取的,因为 HttpContext 不是线程安全的。
-
如果它真的是一个“后台任务”,那么为什么它首先需要访问 HttpContext 呢?后台任务的整个想法是它发生在 HttpContext 之外。
-
我将它作为后台任务启动以防止死锁。
-
那你找错树了。在大多数情况下,如果您使用 .Result、Task.Run 或 .Wait(),这些都是强烈的迹象,表明您需要仔细检查异步模式。如果你想调用一个异步方法,在大多数情况下你应该只是
await它。
标签: c# asp.net async-await task-parallel-library httpcontext