何时使用System.Threading.ThreadPool并且当其中一个自定义线程池?

时间:2011-11-16 15:45:07

标签: c# asp.net asynchronous threadpool ihttpasynchandler

我正在为ASP.NET创建一个异步处理程序,它将执行一个缓慢的存储过程。我想我理解为了在慢速和快速页面的混合加载上获得额外的吞吐量,慢速页面需要在与ASP.NET使用的线程池不同的线程池上执行,否则为异步模式将导致使用稀疏线程的数量加倍(如果我错了,请纠正我)。

所以我找到了System.Threading.ThreadPool - 看起来应该可以做到这一点,但是......

网络上的各种教程,例如this one使用此custom poolJohn Skeet's MiscUtils中的一个,以及此tutorial about async patterns中引用的自定义线程池。

System.Threading.ThreadPool自1.1以来就已经存在 - 为什么人们经常觉得有必要写一个全新的?我应该避免使用System.Threading.ThreadPool吗?

在涉及线程时,我是初学者,所以在未定义的术语上轻松一点。

更新即可。要执行的存储过程不一定是MS-SQL,也不一定能使用内置的异步方法,例如BeginExecuteNonQuery()

1 个答案:

答案 0 :(得分:3)

这是我在这个主题上发现的。为什么不在ASP.NET http://madskristensen.net/post/Done28099t-use-the-ThreadPool-in-ASPNET.aspx中使用ThreadPool。它已经很老了,但我认为它没有那么大的变化。如果我错了,请纠正我。

使用System.Threading.ThreadPool或自定义委托并调用其BeginInvoke提供了一种快速方法来为您的应用程序启动工作线程。但不幸的是,它们损害了应用程序的整体性能,因为它们使用ASP.NET使用的相同池中的线程来处理HTTP请求。

在System.Threading.Thread类的帮助下使用自定义线程应解决问题,因为创建的线程不是应用程序池的一部分。