如题,因网站需要,global.asp.cs中执行一些任务,执行完后要sleep一段时间 ,我想请问大家,在sleep这个时间段中,如果有别的访客请求,网站会做出响应吗?
线程的挂起操作实质上就是使线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行。在线程挂起后,可以通过重新唤醒线程来使之恢复运行。
基础知识不牢啊你
global.asax.cs
看放在哪个事件中,Application_Init ,Application_Start,Application_BeginRequest,等等会阻塞。
Application_Error,Application_End 等等不会阻塞。
关键看事件什么时候执行。
传送门:
http://shirlly.iteye.com/blog/518955
在Application_Start时,开一个timer,执行定时任务。
定时任务中,有sleep,这个算不算是一个线程呢?
@技术狂: 不算,定时任务可以看一下discuz的源码(网上有)
很简单,在启动过程(application_start里)启动一个线程,让线程去实现你的需求。如果你直接在global里使用线程sleep,如2楼所言,不同的方法有不同的效果,一般而言,如果方法的执行是基于线程的,则不影响,否则就会阻塞。
在Application_Start时,开一个timer,执行定时任务。
定时任务中,有sleep,这个算不算是一个线程呢?
像楼上说的一样,你最好是开新线程去做你的其它事, 直接让global的任何方法sleep都是不对的。
在Application_Start时,开一个timer,执行定时任务。
定时任务中,有sleep,这个算不算是一个线程呢?
@技术狂: 不是一个线程。定时器的启动是在主线程里,那么定时器的事件执行也会在主线程里。最好是单独开一个线程来实现你的需求。
@519740105: 不是一个线程。???那就是说定时器运行时的sleep会卡住后面的请求
@技术狂: http://blog.csdn.net/net_lover/article/details/6943
@问天何必: 对。
@519740105: http://bbs.csdn.net/topics/391013556?page=1#post-399079043 这里有大牛回答
@技术狂: 恩。不错。忽略了非form了。
@519740105: 另外, 在iis中, 你也要小心会回收掉你的timer, 哈哈。。。。
解决方法是去随便访问个空白页, 证明你还活着
这根本就是错误的问问题方法。
”因网站需要,global.asp.cs中执行一些任务,执行完后要sleep一段时间“
因为我想要离开地面,需要抓着头发将自己提离地面,但是担心自己的力气不够,我是否该减轻体重?
你需要知道的是一个正确离开地面的方法。
请指教!
@技术狂: 指教不敢,就是觉得你方向错了。
什么事情需要用定时器做,然后做完SLEEP。
而不是使用事件方式来触发工作,或者采用其他的方法。
我说的就是你问错问题了,你应该问的是你要用定时器做的那事还有啥更好的方法来完成没有。
@爱编程的大叔:
是这样的,数据库中不断有订单进来,但是我们不允许实时处理(公司管理原因),就定时5分钟处理一次,每次是把订单信息发邮件给供应商,如果两条订单之间不sleep一下的话,怕被认定为垃圾邮件。
所以用的是global中加timer的机制
@技术狂:
总结如下:
1、你要做的这个事情和这个网站没有一毛钱的关系。
2、这样完全可以另外开一个网站,另外一个程序池,控制得好。
3、事情真的很多,很忙的话,甚至可以单独一台服务器来搞这事。
4、垃圾邮件那估计是因为你们用的是企业邮局,这个好多方法可以解决,如果你们的订单到了5分钟就会有新订单的情况。比如多几个不同的邮件服务商之类的。
或者直接搭建邮件服务器。
5、如果是我的话,我会做出Window Service的形式。
6、楼上这些达人应该还有好多的解决方案。
7、所以问题来了,问问题技术究竟哪家好?
@爱编程的大叔:
1、2、3不解释,我也不是来讨论垃圾邮件的
只是想问,在global中使用timer会不会阻塞