C#限制池连接

C#限制池连接,c#,database,threadpool,pooling,C#,Database,Threadpool,Pooling,我知道在c#中,默认池大小是100,但我想将池大小限制为20,剩余的对db的请求必须排队,在固定时间后,未处理的请求必须被驳回 我尝试了以下连接字符串,并使用postman一次发送了100个请求,但它处理了所有请求,没有通过任何异常 connection.ConnectionString = "Server=servername;Database=dbname;Trusted_Connection=true;Connection Timeout=0;Connection Lifetime=30;

我知道在c#中,默认池大小是100,但我想将池大小限制为20,剩余的对db的请求必须排队,在固定时间后,未处理的请求必须被驳回 我尝试了以下连接字符串,并使用postman一次发送了100个请求,但它处理了所有请求,没有通过任何异常

connection.ConnectionString = "Server=servername;Database=dbname;Trusted_Connection=true;Connection Timeout=0;Connection Lifetime=30;Min Pool Size=0;Max Pool Size=20;Pooling=true;"

一种带有20个锁的资源锁定形式难道不起作用吗?e、 g

static readonly object SomeLock = new object();
using (var lck = new CodeLock()) 
{
   var ok = lck.Lock(SomeLock, timeout) 
   // do stuff, connect to db
}

public struct CodeLock : IDisposable
{
    private object lockedObject;
    private bool lockTaken;

    public bool Lock(object someLock, int timeout)
    {
        lockedObject = someLock;
        Monitor.TryEnter(someLock, timeout, ref lockTaken);
        if (lockTaken == false)
        {
            // didn't acquire lock within timeout
            return false;
        }
        return true;
    }

    public void Dispose()
    {
        if (lockedObject == null) return;
        if (lockTaken)
        {
            lockTaken = false;
            Monitor.Exit(lockedObject);
        }
    }
}

这感觉像是一个XY问题-。为什么要这样做?我尝试了20个,但不起作用,所以我尝试了110个(超过默认值),但没有任何更改更改更改最大池大小不会导致排队-它会导致尝试获取基础连接以引发异常。。。如果您想要排队,您可能想要更像信号量的东西,但是您需要小心不要使自己死锁,并且始终在信号量获取时使用try/finally,因此,您不会泄漏它们并耗尽…@ashwathhegde Postman collections按顺序运行,因此您几乎可以肯定会在下一个请求命中之前释放回池的连接。@ashwathhegde有一些工具,如RestCommander(?)可以这样做,也可以编写一些C#来触发异步HttpRequests,直到它们都在运行时才开始。