当前位置:编程学习 > C#/ASP.NET >>

IHttpAsyncHandler异步操作对于线程的影响

一个http请求同步页面即一般的aspx页面, 会从线程池中取出一个线程进行处理,直至请求结束才会放回线程池。

然而异步页的话是  接受请求然后从线程池中取出一个线程处理,然后立即从 BeginProcessRequest 方法中返回,并且传回对有效的 IAsyncResult 实例的引用,当有满足的条件时调用回调函数, 到线程池中提取线程处理当次请求,并把线程放回线程池?


我想问的是当  异步操作接到一个请求,然而我把这个请求挂起,20秒内不做处理,相当于一个长连接,当20秒后我在 调用回调函数处理该请求。!!!
?就是这20秒内,这个方法是不用线程管理的嘛?  那会不会影响其他线程处理其余的http页面。?看msdn上的图解,这20秒内是不用线程池的线程处理的,那是放到什么地方的呢?

还有就是我如何做到计时20秒返回呢? 

我设想当一个异步请求过来的之后我经过初步处理,然后有个专门处理这些请求的队列,当每一个异步请求进入队列20秒后,自动调用进程处理这个请求, 这个队列是否需要一个线程单独处理?? 该如何实现呢?


不好意思我是新手,很少接触线程这块,今天在msdn上查阅了一些资料,不知道该如何理解和实现这个功能。

--------------------编程问答--------------------
引用 楼主 xiaoyao_dai 的回复:
?就是这20秒内,这个方法是不用线程管理的嘛?  那会不会影响其他线程处理其余的http页面。?看msdn上的图解,这20秒内是不用线程池的线程处理的,那是放到什么地方的呢?

当然你是阻塞在一个线程里,它不是asp.net处理客户端请求的线程池中的线程。

asp.net(2.0版以上的系统)处理客户端请求本来就是使用它自己的线程池的,所以通常你根本不需要再去搞什么多线程编程。但是它的容量有限。以前是200,现在在.net4.5有没有增加,我不知道。实际上如增加到1000,那么你就根本不用什么多线程了。

假设你认为这200个线程也不够用,例如你的所谓“20秒内不做处理”的这种东西使得asp.net线程池确实显得太少,你才需要再弄什么线程。否则额外地再去在aspx、ashx里边进行多线程编程是多余的。 --------------------编程问答-------------------- 我可以告诉你,你设想的那种机制根本不是asp.net程序员该考虑的事情。你应该设计windows service服务。

asp.net编程设计中不要花哨到这类设计。 --------------------编程问答--------------------
引用 2 楼 sp1234 的回复:
我可以告诉你,你设想的那种机制根本不是asp.net程序员该考虑的事情。你应该设计windows service服务。

asp.net编程设计中不要花哨到这类设计。


也不是啊,像webqq 我监视了他的请求,不是用ajax轮询而是用长连接。 他的就是55秒吧,55秒没有响应就会自动断开。  我也模拟了这个环境 只是考虑性能,不可能一直挂着不处理把。实现代码到是很简单就是遇到很多小问题。 今天在msdn上查了很久。 应该是有这样的方案的 或者得写个web服务? --------------------编程问答-------------------- 没人啊 --------------------编程问答--------------------  一星期了 擦 --------------------编程问答-------------------- 最近我也在研究多线程,并且取得了一些成果。可以和楼主一起分享一下。我们是建了一个web服务用lock控制一个线程一直查数据库,把查到结果放在linq里面,建一个公共查询方法查询linq,客户端用Comet发起长连接new 一个Thread(线程)轮询 公共查询方法。 --------------------编程问答-------------------- 不知道LZ研究的是什么东西,但是感觉很厉害
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,