asp.net-mvc – AsyncController如何避免使用ASP.NET工作线程?
AsyncController究竟是如何避免使用ASP.NET工作线程的?如果我使用基于事件的模式(伪代码):
[AsyncTimeout(60000)] public void WaitForWakeUp() { AsyncManager.OutstandingOperations.Increase(); EventRaisedElsewhere += state => { AsyncManager.OutstandingOperations.Decrease(); return Content("Woke up because of " + state); }; } …然后根据Clay Lenharts,它不使用ASP.NET工作线程.这怎么可能? 我看了一下AsyncController源代码,但没有理解任何东西,除了它使用IAsyncResult很多,并在某些地方做QueueUserWorkItem. 但是BeginInvoke和QueueUserWorkItem如何不使用ASP.NET工作线程?当然这两个都使用线程池线程,并且ASP.NET工作进程中肯定只有一个线程池? 根据MSDN,
但是对于任何非平凡的事情,听起来像启动一个异步操作仍然需要一个线程来运行.只有在极其简单的情况下(比如使用BCL下载网页内容),它才能完全展开和/或完全受IOCP约束,对吧? 部分是因为我看到使用AsyncController实现所有这些聊天服务器,如果他们所做的只是“等待新消息”,我不明白如何在非线程池线程上完成. 解决方法
你是对的.它确实使用asp.net线程来启动异步调用,但该线程已完成&回到游泳池.然后异步进程在来自工作线程池的另一个线程上运行,然后通知asp.net它需要一个线程来处理结果.
它更有效,因为asp.net线程池限制了传入连接,因此尽快释放它们可以让您更快地处理更多传入连接. 至少我是这样看的. 编辑 我相信这就是这里发生的事情.有少量工作线程处理请求.这些工作线程在后台池中生成线程以处理异步请求. 西蒙 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net调查问卷引擎
- 如何在ASP.NET Core MVC 1.0中创建和管理插件?
- asp.net-ajax – 建议使用不引人注意的AJAX与MVC 5?
- asp.net-mvc-3 – C#.NET MVC3 ModelState.IsValid
- asp.net – Dropdownlist在Page_ClientValidate()之后不回发
- asp.net – CSS更改不反映在网站上
- asp.net-mvc – 如何在MVC3 Razor中禁用DropDownListFor?
- asp.net – 将JSON发布到Controller
- asp.net – 在.NET中以编程方式添加HttpHandler的任何方法?
- asp.net-mvc – 如何覆盖ASP.Net MVC的默认模型绑定器,以便
- asp.net – 首先使用数据库向aspnetusers添加列
- asp.net-mvc – 使用MVC Futures的异步控制器在.
- 当我的Login.aspx不在我的应用程序的根目录时,如
- asp.net – 为什么removeServerHeader在Azure We
- asp.net-mvc-2 – ASP.NET MVC2 ModelMetadataPr
- asp.net-web-api – 使用WebAPI PUT / POST请求启
- asp.net-mvc – ASP.NET MVC:从一个视图重定向到
- asp.net – 如何全局创建CustomPrincipal(使用和
- asp.net-mvc-3 – WebGrid列中的MVC3 Html.Begin
- asp.net-mvc-3 – 用Response调用的Ajax.BeginFo