使用asp.net Web API时,可以通过整个请求来依赖CallContext吗?
我已阅读decade-old blog post,我不确定它是否仍然有效(如there所述)。
假设Thread-Agility启动,如果我在全局过滤器中设置数据,是否可以安全地假设它将在整个请求中出现?
答案 0 :(得分:3)
如果ASP.Net切换线程,则会丢失CallContext。在异步模型中,asp.net任务调度程序将负责将异步调用连接回具有相同HttpContext 的请求线程,但不一定是相同的线程。
示例:一个请求启动,然后你会在返回之前异步等待一些缓慢的IO - 当你在等待那个缓慢的IO时,没有理由让你的请求线程无所事事,所以它可能会被使用另一个请求。
ASP.Net是Thread Agility
(google it)中的一项重要练习,此处也有一个很好的讨论:CallContext vs ThreadStatic vs HttpContext