我一直认为,将ThreadPool用于(比如说非关键的)短暂的后台任务被认为是最佳实践,即使在ASP.NET中也是如此,但是后来我发现this article似乎提出了不同的建议-其论点是您应该让ThreadPool来处理与ASP.NET相关的请求。
到目前为止,我一直在做一些小的异步任务:
ThreadPool.QueueUserWorkItem(s => PostLog(logEvent))the article建议显式地创建一个线程,类似于:
new Thread(() => PostLog(logEvent)){ IsBackground = true }.Start()第一种方法具有托管和绑定的优点,但也有可能(如果本文是正确的),后台任务将与ASP.NET请求处理程序争夺线程。第二种方法释放了ThreadPool,但代价是它是无界的,因此可能会占用太多资源。
所以我的问题是,文章中的建议是正确的吗?
如果您的站点获得了如此多的流量,而您的ThreadPool已经满了,那么是更好地使用带外,还是满了的ThreadPool意味着您无论如何都要达到资源的极限,在这种情况下,您不应该尝试启动自己的线程?
澄清:我只是在问小型非关键异步任务(例如,远程日志记录)的范围,而不是需要单独进程的昂贵工作项(在这些情况下,我同意您需要一个更健壮的解决方案)。
https://stackoverflow.com/questions/1325718
复制相似问题