gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:01:59 25 4
gpt4 key购买 nike

我正在阅读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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com