首先,我知道“正确”的答案是不要在 ASP.NET Web 应用程序中执行后台线程。我们有充分的理由这样做,所以请接受它对我们的用例有意义的假设。
我们的后台处理通常受 CPU 限制(有时可能受 IO 限制)。通常需要 2 秒到 2 分钟(有时会更长,长达一个小时)。我们将后台工作人员的数量限制为服务器上核心数量的 1.5 倍。
我还假设最好在 ASP.NET 环境中使用现有的线程池。我的代码将限制线程数,但我猜最好从现有池中提取。
那么这就引出了一个问题,创建线程的最佳方法是什么?
- ThreadPool.QueueUserWorkItem
- HostingEnvironment.QueueBackgroundWorkItem()
- 任务运行()
- 还有什么?
HostingEnvironment.QueueBackgroundWorkItem() & Task.Run() 是否来自 ASP.NET 线程池?