【发布时间】:2014-01-16 22:52:02
【问题描述】:
我正在使用 ASP.NET MVC 3 和 .NET 4。我已经安装了 .NET 4.5.1。
当我比较 HttpModule 和 Controller.ExecuteCore 中的线程 ID 时,我可以看到它们是不同的。为什么会这样? 此行为是在哪个 .NET Framework 版本中引入的?
编辑:
我观察到,当我发出 GET 请求时,我的 HttpModule 中的 ManagedThreadId 与我的 MVC 控制器中的相同。但是当我发出 POST 请求时,两者都是不同的。
【问题讨论】:
-
异步是一个很可能的原因。即使您不使用它,该框架也可能在内部使用。它只是从线程池中拉出一个线程,无论哪个可用。如果您的请求异步等待来自数据库的数据(例如,可能是文件访问),则该线程将返回线程池,直到数据返回。当它返回时,不能保证原始线程没有停止做其他事情。
-
在哪个 .NET Framework 版本中引入了这种行为?
-
如果使用 IAsyncHttpHandler 或 BeginXXX 和 EndXXX,则在 .NET Framework 1.0 中引入了允许。实际上,就 MVC 与 AsyncController 一起使用时,MVC3 可能已经引入了它。
-
据我所知 MVC3 不提供任何异步方法。我的项目中没有使用任何异步方法
-
这并不意味着 MVC 在内部不使用异步,无论如何,您永远不能依赖单个线程来处理所有 Web 请求。
标签: asp.net multithreading asp.net-mvc-3