加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:56:59 所属栏目:asp.Net 来源:网络整理
导读:我正在阅读 Walkthrough: Creating an Asynchronous HTTP Handler并注意到它们从处理程序线程传递HttpContext并在后台线程上运行的WaitCallback中使用它.它会调用_context.Response.Write().我是否正确假设这不违反HttpContext不是线程安全的事实,因为处理程
我正在阅读 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控制线程并确保只有一个线程正在处理请求.例如,当您继续手动(通过使用线程池或新的Thread())并将HttpContext提供给该线程,同时继续执行时,它会有所不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读