【问题标题】:Is Visual Studio Asp.Net Development Server Really Multi-Threaded?Visual Studio Asp.Net 开发服务器真的是多线程的吗?
【发布时间】:2011-10-28 16:11:11
【问题描述】:

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

当我查看 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);

}
}

【问题讨论】:

  • 你不应该真的停止主执行线程。这在您启动的工作线程上可以正常工作。同样,如果您想跨会话交谈,则使用应用程序对象有更好的机制。
  • @SimonHalsey Main exec 线程不受此影响。确实和Session锁有关。

标签: asp.net multithreading visual-studio cassini


【解决方案1】:

网络服务器一次只处理来自每个用户的一个页面。

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

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

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

【讨论】:

  • 谢谢! IIS 也是这样吗?
猜你喜欢
  • 2023-04-01
  • 2010-09-08
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
相关资源
最近更新 更多