我正在调试在 .NET 4.0 (Windows 7) 上运行的 ASP.NET MVC 2 应用程序,当前位于 Visual Studio 调试 Web 服务器 Cassini 内部。
一切都运行良好,但我的 Application.EndRequest 处理程序突然出现异常。在调查这个问题后,我发现原因是 Cassini 在与 BeginRequest 不同的线程上调用 EndRequest (然后,在 BeginRequest 中设置并在 EndRequest 处理程序中使用的 ThreadStatic 变量为 null,因为在此线程上,BeginRequest 从未被调用)称为)。
Cassini 在不同线程上执行 BeginRequest 和 EndRequest 的原因是什么?
我知道原因可能是“异步”页面指令(请参阅 Do ASP.NET Requests always BeginRequest and EndRequest on the same thread? ,但我的页面指令中没有“异步”属性)。
一定还有其他原因。
谢谢!
最佳答案
ASP.NET 是 thread-agile一般来说。您不应该假设整个请求将在一个线程中处理。使用 HTTP 上下文而不是线程静态变量。
虽然在请求处理期间只有某些地方线程可以切换,但在我看来,最好避免做出任何假设。
关于.net - Cassini (VS WebDev) 在不同线程上执行 BeginRequest 和 EndRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4468607/