首页 新闻 会员 周边 捐助

如果在global.asp.cs中的执行代码中有thread.sleep,会阻塞整个网站吗?

0
悬赏园豆:80 [待解决问题]

如题,因网站需要,global.asp.cs中执行一些任务,执行完后要sleep一段时间 ,我想请问大家,在sleep这个时间段中,如果有别的访客请求,网站会做出响应吗?

技术狂的主页 技术狂 | 初学一级 | 园豆:122
提问于:2015-04-08 22:10
< >
分享
所有回答(5)
0

线程的挂起操作实质上就是使线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行。在线程挂起后,可以通过重新唤醒线程来使之恢复运行。

基础知识不牢啊你

GetAlert | 园豆:110 (初学一级) | 2015-04-08 23:14
0

global.asax.cs

看放在哪个事件中,Application_Init  ,Application_Start,Application_BeginRequest,等等会阻塞。

 Application_Error,Application_End 等等不会阻塞。

关键看事件什么时候执行。

 

传送门:

http://shirlly.iteye.com/blog/518955

 

 

路西恩 | 园豆:371 (菜鸟二级) | 2015-04-08 23:31

在Application_Start时,开一个timer,执行定时任务。

定时任务中,有sleep,这个算不算是一个线程呢?

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 10:35

@技术狂: 不算,定时任务可以看一下discuz的源码(网上有)

支持(0) 反对(0) 路西恩 | 园豆:371 (菜鸟二级) | 2015-04-09 16:41
0

很简单,在启动过程(application_start里)启动一个线程,让线程去实现你的需求。如果你直接在global里使用线程sleep,如2楼所言,不同的方法有不同的效果,一般而言,如果方法的执行是基于线程的,则不影响,否则就会阻塞。

519740105 | 园豆:5810 (大侠五级) | 2015-04-09 09:01

在Application_Start时,开一个timer,执行定时任务。

定时任务中,有sleep,这个算不算是一个线程呢?

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 10:35
1

像楼上说的一样,你最好是开新线程去做你的其它事,   直接让global的任何方法sleep都是不对的。  

问天何必 | 园豆:3311 (老鸟四级) | 2015-04-09 09:08

在Application_Start时,开一个timer,执行定时任务。

定时任务中,有sleep,这个算不算是一个线程呢?

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 10:35

@技术狂: 不是一个线程。定时器的启动是在主线程里,那么定时器的事件执行也会在主线程里。最好是单独开一个线程来实现你的需求。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-09 10:43

@519740105: 不是一个线程。???那就是说定时器运行时的sleep会卡住后面的请求

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 10:47

@技术狂: http://blog.csdn.net/net_lover/article/details/6943

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2015-04-09 11:24

@问天何必: 对。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-09 12:39

@519740105: http://bbs.csdn.net/topics/391013556?page=1#post-399079043 这里有大牛回答

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 14:16

@技术狂: 恩。不错。忽略了非form了。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-09 14:30

@519740105: 另外, 在iis中, 你也要小心会回收掉你的timer, 哈哈。。。。

解决方法是去随便访问个空白页, 证明你还活着

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2015-04-10 13:22
0

这根本就是错误的问问题方法。

”因网站需要,global.asp.cs中执行一些任务,执行完后要sleep一段时间“

因为我想要离开地面,需要抓着头发将自己提离地面,但是担心自己的力气不够,我是否该减轻体重?

 

你需要知道的是一个正确离开地面的方法。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-09 09:34

请指教!

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 11:04

@技术狂: 指教不敢,就是觉得你方向错了。

什么事情需要用定时器做,然后做完SLEEP。

而不是使用事件方式来触发工作,或者采用其他的方法。

我说的就是你问错问题了,你应该问的是你要用定时器做的那事还有啥更好的方法来完成没有。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-09 11:16

@爱编程的大叔:

是这样的,数据库中不断有订单进来,但是我们不允许实时处理(公司管理原因),就定时5分钟处理一次,每次是把订单信息发邮件给供应商,如果两条订单之间不sleep一下的话,怕被认定为垃圾邮件。

所以用的是global中加timer的机制

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 12:55

@技术狂: 

总结如下:

1、你要做的这个事情和这个网站没有一毛钱的关系。

2、这样完全可以另外开一个网站,另外一个程序池,控制得好。

3、事情真的很多,很忙的话,甚至可以单独一台服务器来搞这事。

4、垃圾邮件那估计是因为你们用的是企业邮局,这个好多方法可以解决,如果你们的订单到了5分钟就会有新订单的情况。比如多几个不同的邮件服务商之类的。

或者直接搭建邮件服务器。

5、如果是我的话,我会做出Window Service的形式。

6、楼上这些达人应该还有好多的解决方案。

7、所以问题来了,问问题技术究竟哪家好?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-09 13:17

@爱编程的大叔: 

1、2、3不解释,我也不是来讨论垃圾邮件的

只是想问,在global中使用timer会不会阻塞

支持(0) 反对(0) 技术狂 | 园豆:122 (初学一级) | 2015-04-09 13:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册