【发布时间】:2012-03-02 18:47:30
【问题描述】:
自从我开始编写 ASP.NET 应用程序以来,当我想添加线程时,我可以通过 3 种简单的方法在我的 ASP.NET 应用程序中完成线程:
- 使用
System.Threading.ThreadPool。 - 使用自定义委托并调用其
BeginInvoke方法。 - 借助
System.Threading.Thread类使用自定义线程。
前两种方法提供了一种为您的应用程序启动工作线程的快速方法。但不幸的是,它们会影响应用程序的整体性能,因为它们使用 ASP.NET 用于处理 HTTP 请求的同一池中的线程。
然后我想用一个新的Task或者async/await来写IHttpAsyncHandler。你可以找到一个例子是 Drew Marsh 在这里解释的:https://stackoverflow.com/a/6389323/261950
我的猜测是,使用 Task 或 async/await 仍会消耗 ASP.NET 线程池中的线程,并且出于明显的原因我不想要。
您能否告诉我我是否可以在后台线程上使用 Task (async/await) 就像使用 System.Threading.Thread 类 而不是来自线程池? p>
提前感谢您的帮助。
托马斯
【问题讨论】:
-
从同一个池中消耗线程会损害性能对我来说并不明显。你确定是这样吗?
-
事实上我依赖。如果我理解得很好,框架 4 中的 asp.net 线程池中的线程没有更多限制。因此,如果需要处理更多请求,则将新线程注入线程池。我记得在框架 4 之前,线程池有一个限制。
-
tl;dr 对于未来的访问者,此时的规范解决方案(正如斯蒂芬在他的回答中提到的那样)是只使用 HttpTaskAsyncHandler。
标签: asp.net threadpool task-parallel-library async-await ihttpasynchandler