Visual Studio Asp.Net开发服务器真的是多线程的吗?

时间:2011-10-28 16:11:12

标签: asp.net multithreading visual-studio cassini

我在VS2010中调试一个在本地开发服务器(cassini?)中运行的WebProject。其中一个aspx页面调用ManualResetEvent.WaitOne(),另一个Page aspx页面调用ManualResetEvent.Set()(在同一个Global对象上)以释放第一页。

当我查看VS2010中的线程列表时,似乎有很多工作线程。但是,Web服务器似乎在被ManualResetEvent.WaitOne()调用阻止时停止处理任何内容。因此,除非.WaitOne()超时,否则不会加载ManualResetEvent.Set()。

这里发生了什么?

// Sample Code

Class SyncTest {

 private System.Threading.ManualResetEvent eConnected = 
       new System.Threading.ManualResetEvent(false);
 private bool isConnected;

public SyncTest ()
{
    this.isConnected = false;
}

public void SetConnected(bool state)
{
    isConnected = state;
    if (state)
        eConnected.Set();
    else
        eConnected.Reset();
}

public bool WaitForConnection(int timeout)
{
    return eConnected.WaitOne(timeout);

}
}

1 个答案:

答案 0 :(得分:3)

Web服务器每次只处理一个页面。

如果您希望一个用户请求的页面并行运行,您必须使页面(除了一个)无会话。

EnableSessionState="false"放入页面的@Page指令中,使其无会话。

这当然意味着您无法使用会话数据识别请求。如果您想知道谁请求了该页面,您必须在请求中发送它。