asp.net中的thread.sleep

我正在为我的网站模拟彗星实时馈送协议,所以在我的控制器中我正在添加

while(nothing_new && before_timeout){ Thread.Sleep(1000); } 

但我注意到在添加此function后整个网站变慢了。 调试后我得出结论,当我调用Thread.Sleep时,即使在其他请求中,所有线程都被阻止。

为什么Thread.Sleep阻塞所有线程,不仅是当前线程,还有如何处理这样的问题?

@Servy说的是正确的。 除了他的答案,我想抛出2美分。 我打赌你使用的是ASP.NET会话,并且你正在从同一个会话发送并行请求(例如你发送了多个AJAX请求)。 除了ASP.NET会话不是线程安全的,并且您不能从同一会话获得并行请求。 ASP.NET将简单地序列化调用并按顺序执行它们。

这就是你观察这种阻塞的原因。 它将仅阻止来自同一ASP.NET会话的请求。 如果您从其他会话发送HTTP请求,它将不会阻止。 此行为是设计使然,您可以here阅读更多相关信息。

ASP.NET会话就像一个癌症,我建议你在发现它们被用于Web应用程序时立即禁用它们:

  

不再排队。 现在你有了一个可扩展的应用程序。

我总结说,当我调用thread.sleep时,即使在其他请求中,所有线程都被阻止

这个结论是不正确的。 Thread.Sleep不阻止任何其他线程,它只阻止当前线程。 如果多行代码都被这行代码阻塞,那么这是因为所有这些线程都在使用这行代码。