C# 为什么不无缘无故地使用thread.sleep,并向程序员解释它

C# 为什么不无缘无故地使用thread.sleep,并向程序员解释它,c#,asp.net,C#,Asp.net,在我们的项目中传递代码时,我遇到了一个web方法,它的末尾有以下代码: thread.sleep(6000); return true; 现在,这样做是为了延迟来自客户端的jQueryAjax调用,ajax动画将显示更长的时间 在我看来,这是非常错误的。UI和服务器端之间不应该有这种连接。如果他想让动画持续更长时间,他可以在客户端使用setTimeOut功能 我的问题是:我如何向程序员解释为什么这是如此错误?不仅仅是因为客户端/服务器的问题,还有为什么要在网站上调用线程.sleep?因为一个w

在我们的项目中传递代码时,我遇到了一个web方法,它的末尾有以下代码:

thread.sleep(6000);
return true;
现在,这样做是为了延迟来自客户端的jQueryAjax调用,ajax动画将显示更长的时间

在我看来,这是非常错误的。UI和服务器端之间不应该有这种连接。如果他想让动画持续更长时间,他可以在客户端使用
setTimeOut
功能


我的问题是:我如何向程序员解释为什么这是如此错误?不仅仅是因为客户端/服务器的问题,还有为什么要在网站上调用
线程.sleep

因为一个web方法可能有多个使用者,而不是所有使用者都希望数据延迟

更新

好的,池中也有有限数量的工作线程来处理客户端请求。你不想把他们绑起来什么都不做。它是UI延迟数据显示的功能,而不是提供数据的web服务/页面方法。您不会在数据访问层中设置睡眠,为什么要将其设置在WebMethod中?

同时延迟:

  • 您正在使用/阻止线程
  • 你在消耗内存
  • 您有一个开放的TCP/IP连接
这些都是服务器上昂贵的资源

因为:

  • 如果出现另一个请求,则必须创建一个新线程的可能性更大,因此这将使用CPU、内存等,这将延迟该请求。(转到句子的开头)
  • 内存消耗越多,意味着页面错误越多,磁盘队列越大。所有请求都需要更长的时间
  • TCP/IP连接是有限的资源

这将最终导致服务器上的许多阻塞线程。
假设每秒有100个请求,600个线程处于休眠状态。

这些线程将在堆栈空间中使用1MB的RAM,这样就浪费了600MB的服务器RAM。

ROFL-在服务器端实现的动画延迟:D

将延迟加上“客户需要延迟”的借口可以让方法客户意识到。那是一种气味。从某种意义上讲,它也违反了SRP——因为now方法做了两件事(做一些有用的事情并进行延迟),如果您想保持睡眠,您必须在名称中指明它,例如:
doSomethinguselfandDelaytoo()

但对我来说,“方法应该是调用方不可知的”应该是重点

“我们需要延迟”的借口违反了关注点分离原则——因为现在您的方法不仅获取数据,而且还受到表示逻辑(动画)的污染

此外,您可以在动画队列中引入延迟,这可以(而且应该)使用jQuery轻松完成

原则的存在是有原因的,根据经验,违反原则的影响并不总是在任何情况下立即显现出来,但在大多数情况下,它会回来追捕你

如果他继续坚持,至少把这个方法分成两部分——一个方法只会做“睡眠(6000);返回”;现在这将是荒谬的

我如何向程序员解释为什么这是如此错误


简单。Sleep()的用法是一个很好的例子。句号。

不错。。但还不够好。。我的这个队友喜欢争论。。我需要一个更好的解释…就我个人而言,我认为你应该问这个问题。他一定很为那部动画感到自豪,他强迫人们观看6秒钟,而不是表演网站的任何功能。Grrrr…修正了我的评论。PR(程序员)是另一个专门针对此类问题的SE网站(imho)。我不知道有这样的网站。。。下次我会知道的。谢谢