我有一个系统启动一个新的线程与应用程序的每个请求。 如果应用程序收到数百个请求,可能没有足够的内存来启动一个新的线程,所以它会抛出一个exception。
我想知道一个处理这种情况的理想机制。 就像,如果应用程序正在接收大量的请求,那么如果没有足够的内存或活动线程数达到最大,那么我会延迟处理其他请求。
但我不知道如何实现这一点。
简单的解决方案:增加线程池限制。 这实际上是可行的,虽然这些日子过时了。
更彻底的解决方案:使用SemaphoreSlim
限制并发异步活动请求的数量。 确保等待异步。 如果你同步等待,你会在等待的时候再次烧掉一个线程。 在异步等待之后,可以恢复正常的同步阻塞处理。 这只需要很小的代码更改。
最彻底的解决方案:完全异步实现您的处理。 这样你永远不会用完线程。