异步HTTP处理程序和在后台线程中使用HttpContext?

5
我正在阅读创建异步HTTP处理程序的演练,并注意到它们从处理程序线程传递HttpContext并在后台线程上使用WaitCallback。 它调用像_context.Response.Write()这样的方法。 我正确地认为,这不违反了HttpContext不是线程安全的事实,因为处理程序线程在异步工作开始后将不再使用它吗?
此外,跨线程使用HTTPContext提供了有关HttpContext和线程的一些重要信息。 HttpContext是否完全不是线程安全的,或者只是像Response这样的项目? 如果仅以读模式访问,多个后台线程能够访问Items属性吗?
1个回答

5
HttpContext及其属性不是线程安全的,因此您需要非常小心。同时从不同的线程读取数据不会有任何害处,但是您必须确保没有发生写操作。即使您确定未更改 Items 属性,我仍建议复制并将其提供给后台线程。这清楚地传达了意图,并可以避免在代码审查期间讨论或重新评估此代码是否真正线程安全。
现在关于在异步请求中使用 HttpContext ;从不同的线程访问 HttpContext 将是危险的,但在这种情况下,ASP.NET控制线程并确保只有一个线程处理请求。如果您手动启动一个新线程(使用线程池或 new Thread()并向该线程提供HttpContext,同时继续执行,那么情况就会不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接