- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读Walkthrough: Creating an Asynchronous HTTP Handler并注意到他们从处理程序线程传递 HttpContext
并在后台线程上运行的 WaitCallback
中使用它。它会进行类似 _context.Response.Write()
的调用。我是否正确地假设这不会违反 HttpContext 不是线程安全的事实,因为处理程序线程在异步工作开始后不会使用它?
此外,Using an HTTPContext across threads有一些关于 HttpContext 和线程的好信息。是所有 HttpContext 都不是线程安全的,还是只是像 Response 这样的项目?如果仅在读取模式下,多个后台线程是否可以访问 Items
属性?
最佳答案
HttpContext
并且它的所有属性都不是线程安全的,因此您应该非常小心。从不同线程同时读取数据不会造成任何损害,但您必须确保没有发生写入操作。尽管如此,即使您确定Items
属性没有改变,我更愿意制作一个副本并将其提供给后台线程。这清楚地传达了意图,并使您免于在代码审查期间进行讨论或人们重新评估此代码是否真的是线程安全的。
现在关于使用HttpContext
在异步请求中;访问HttpContext
来自不同线程的请求会很危险,但在这种情况下,ASP.NET 控制线程并确保只有一个线程正在处理该请求。例如,当您手动启动一个新线程(通过使用线程池或 new Thread()
)and supplying HttpContext
时,情况会有所不同。到该线程,同时继续执行。
关于asp.net - 异步 HTTP 处理程序并在后台线程中使用 HttpContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237145/
我是一名优秀的程序员,十分优秀!