gpt4 book ai didi

c# - ThreadPool.SetMinThreads 在 IIS 托管应用程序中不起作用

转载 作者:太空狗 更新时间:2023-10-30 01:31:37 26 4
gpt4 key购买 nike

我有一个设计为 Web API 的 ASP.NET 4.6 应用程序。它有一个长时间运行的操作,大约需要 60 秒,但是这个操作负载并不重,让我们想象一下 Thread.Sleep(60000)
该操作目前不能异步,因为它依赖于第三方非异步库,因此它会阻塞执行该操作的线程 60 秒。当超过 50 个请求同时发送到应用程序时,问题就变成了,新请求在队列中等待(有时多达 400 个)。我尝试像这样增加线程池线程的最小和最大数量:

ThreadPool.SetMinThreads(300, 300);
ThreadPool.SetMaxThreads(500, 500);

这些值已成功更改,如果我在 IIS Express 上运行应用程序,应用更改并很快分配新线程(大约 3 秒),所有请求都已处理,大家都很高兴:

the application hosted on IIS Express

但是,如果我在 IIS 10 上运行应用程序,它只会分配 40-60 个线程,其余请求正在排队:

the application hosted on IIS 10

如何在 IIS 托管应用程序中正确使用 ThreadPool.SetMinThreads
有没有其他方法可以达到同样的目的?

最佳答案

根本原因在于 IIS 对 Windows 10 企业版并发请求执行的限制:最多可以同时执行 10 个请求。实际上整个过程我有 46 个线程,只有 10 个线程来自线程池。当我尝试在 Windows Server 2012 上运行我的应用程序时,我没有遇到任何问题,因此在几秒钟内在线程池中创建了 400 个线程。

关于c# - ThreadPool.SetMinThreads 在 IIS 托管应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40549717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com